[Freeswitch-users] Switch_curl

Chris Mandra mandra at gmail.com
Thu Mar 17 05:23:35 MSK 2016


Thanks for the responses guys. I have another question: I need to call
mod_curl api from my module. What's the proper way to call a module from a
module?
thanks, chris

On Wed, Mar 16, 2016 at 4:54 PM, Anthony Minessale <
anthony.minessale at gmail.com> wrote:

> If you use more threads you just need to make sure the objects are
> properly scoped.  For instance, if you want to use a session from the other
> thread you need to read lock it for the life of the thread.  Objects shared
> need to be dynamically allocated and properly mutexed etc.
>
> Whatever thread you call curl from will be used for the whole
> curl operation.
>
>
> On Wednesday, March 16, 2016, Michael Jerris <mike at jerris.com> wrote:
>
>> depends on your needs.  The concern would be trying to access those
>> objects across threads potentially could cause issues depending on if they
>> are syncronized or not, easier to just not do it and not have the concern.
>> Anthony is suggesting looking at how we do it in other places.  Life cycle
>> could be an issue, are you destroying things too early?
>>
>> On Mar 16, 2016, at 5:00 AM, Chris Mandra <mandra at gmail.com> wrote:
>>
>> Thanks for responding Anthony. Can you tell me this:
>> Should curl calls be done in separate thread or is it ok to do them in
>> the main thread of modules?
>> On Tuesday, March 15, 2016, Chris Mandra <mandra at gmail.com> wrote:
>>
>>>
>>> Should curl calls be done in separate thread or is it ok to do them in
>>> the main thread of modules?
>>> On Tuesday, March 15, 2016, Anthony Minessale <
>>> anthony.minessale at gmail.com> wrote:
>>>
>>>> Curl is used in a few places and is not unstable.  Study some of those
>>>> mods and maybe you can see how to use it in a typical situation.  Probably
>>>> its related to memory management or lifecycle of objects you may be using.
>>>>
>>>> On Tuesday, March 15, 2016, Chris Mandra <mandra at gmail.com> wrote:
>>>>
>>>>> Hey guys, I'm working on a simple media bug module using FS 1.6. When
>>>>> a call comes in I'm calling switch_curl doing an http get.
>>>>>
>>>>> In switch_standard_app I use switch_curl and invoke
>>>>> switch_curl_easy_perform and exit after that.
>>>>>
>>>>> Calling switch_curl seems very unstable. It's crashing free switch
>>>>> most of the time.  Are there any things I should be looking for related to
>>>>> this? I'm wondering if maybe this is a threading issue? Any ideas?
>>>>> I've included some backtraces
>>>>>
>>>>> Thanks, chris
>>>>>
>>>>>
>>>>> (gdb) bt
>>>>>
>>>>> #0  0x00007f8f00c59cc9 in __GI_raise (sig=sig at entry=6) at
>>>>> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>
>>>>> #1  0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89
>>>>>
>>>>> #2  0x00007f8f00c96394 in __libc_message (do_abort=do_abort at entry=1,
>>>>> fmt=fmt at entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n") at
>>>>> ../sysdeps/posix/libc_fatal.c:175
>>>>>
>>>>> #3  0x00007f8f00ca266e in malloc_printerr (ptr=<optimized out>,
>>>>> str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996
>>>>>
>>>>> #4  _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at
>>>>> malloc.c:3840
>>>>>
>>>>> #5  0x00007f8f01334567 in switch_log_node_free (pnode=pnode at entry=0x7f8eb2b1f158)
>>>>> at src/switch_log.c:136
>>>>>
>>>>> #6  0x00007f8eeb192a24 in read_packet (listener=listener at entry=0x7f8ebc027898,
>>>>> event=event at entry=0x7f8eb2b1f7f0, timeout=timeout at entry=0) at
>>>>> mod_event_socket.c:1361
>>>>>
>>>>> #7  0x00007f8eeb1988a0 in listener_run (thread=<optimized out>,
>>>>> obj=0x7f8ebc027898) at mod_event_socket.c:2719
>>>>>
>>>>> #8  0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at
>>>>> threadproc/unix/thread.c:151
>>>>>
>>>>> #9  0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at
>>>>> pthread_create.c:312
>>>>>
>>>>> #10 0x00007f8f00d1d47d in clone () at
>>>>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
>>>>>
>>>>>
>>>>> *[*
>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>
>>>>> 5:44
>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>
>>>>> *]*
>>>>> <https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027>
>>>>>
>>>>> (gdb) bt full
>>>>>
>>>>> #0  0x00007f8f00c59cc9 in __GI_raise (sig=sig at entry=6) at
>>>>> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>
>>>>>        resultvar = 0
>>>>>
>>>>>        pid = 18329
>>>>>
>>>>>        selftid = 18421
>>>>>
>>>>> #1  0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89
>>>>>
>>>>>        save_stage = 2
>>>>>
>>>>>        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction =
>>>>> 0x0}, sa_mask = {__val = {0 <repeats 16 times>}}, sa_flags = 0, sa_restorer
>>>>> = 0x0}
>>>>>
>>>>>        sigs = {__val = {32, 0 <repeats 15 times>}}
>>>>>
>>>>> #2  0x00007f8f00c96394 in __libc_message (do_abort=do_abort at entry=1,
>>>>> fmt=fmt at entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n") at
>>>>> ../sysdeps/posix/libc_fatal.c:175
>>>>>
>>>>>        ap = {{gp_offset = 40, fp_offset = 32654, overflow_arg_area =
>>>>> 0x7f8eb2b1f010, reg_save_area = 0x7f8eb2b1efa0}}
>>>>>
>>>>>        fd = 2
>>>>>
>>>>>        on_2 = <optimized out>
>>>>>
>>>>>        list = <optimized out>
>>>>>
>>>>>        nlist = <optimized out>
>>>>>
>>>>>        cp = <optimized out>
>>>>>
>>>>>        written = <optimized out>
>>>>>
>>>>> #3  0x00007f8f00ca266e in malloc_printerr (ptr=<optimized out>,
>>>>> str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996
>>>>>
>>>>>        buf = "00007f8ed0036700"
>>>>>
>>>>>        cp = <optimized out>
>>>>>
>>>>> #4  _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at
>>>>> malloc.c:3840
>>>>>
>>>>>        size = <optimized out>
>>>>>
>>>>>        fb = <optimized out>
>>>>>
>>>>>        nextchunk = <optimized out>
>>>>>
>>>>>        nextsize = <optimized out>
>>>>>
>>>>>        nextinuse = <optimized out>
>>>>>
>>>>>        prevsize = <optimized out>
>>>>>
>>>>>        bck = <optimized out>
>>>>>
>>>>>        fwd = <optimized out>
>>>>>
>>>>>        errstr = <optimized out>
>>>>>
>>>>>        locked = <optimized out>
>>>>>
>>>>> #5  0x00007f8f01334567 in switch_log_node_free (pnode=pnode at entry=0x7f8eb2b1f158)
>>>>> at src/switch_log.c:136
>>>>>
>>>>>        node = 0x7f8ed8012ab0
>>>>>
>>>>> #6  0x00007f8eeb192a24 in read_packet (listener=listener at entry=0x7f8ebc027898,
>>>>> event=event at entry=0x7f8eb2b1f7f0, timeout=timeout at entry=0) at
>>>>> mod_event_socket.c:1361
>>>>>
>>>>>        dnode = 0x7f8ed8012ab0
>>>>>
>>>>>        do_sleep = <optimized out>
>>>>>
>>>>>        mlen = 0
>>>>>
>>>>>        bytes = 0
>>>>>
>>>>>        mbuf = 0x7f8ecc1ebfc0 ""
>>>>>
>>>>>        buf = "Content-Type: log/data\nContent-Length: 88\nLog-Level:
>>>>> 7\nText-Channel: 3\nLog-File: param_hps_strategy.cpp\nLog-Func:
>>>>> retrieve\nLog-Line: 115\nUser-Data: \347@
>>>>> \247\a\n\n\000\n\n\000\065-418f-a6d1-9dc8f48e0cf9\n\n\000\000\071\n\n\000c8f48e0cf9"...
>>>>>
>>>>>        len = 88
>>>>>
>>>>>        status = SWITCH_STATUS_BREAK
>>>>>
>>>>>        count = 0
>>>>>
>>>>>        elapsed = <optimized out>
>>>>>
>>>>>        start = 1457966137
>>>>>
>>>>>        pop = 0x7f8ed8012ab0
>>>>>
>>>>>        ptr = 0x7f8ecc1ebfc0 ""
>>>>>
>>>>>        crcount = 0 '\000'
>>>>>
>>>>>        buf_len = 2048
>>>>>
>>>>>        channel = 0x0
>>>>>
>>>>>        clen = 0
>>>>>
>>>>>        __PRETTY_FUNCTION__ = "read_packet"
>>>>>
>>>>>        __func__ = "read_packet"
>>>>>
>>>>> #7  0x00007f8eeb1988a0 in listener_run (thread=<optimized out>,
>>>>> obj=0x7f8ebc027898) at mod_event_socket.c:2719
>>>>>
>>>>>        listener = 0x7f8ebc027898
>>>>>
>>>>>        buf = '\000' <repeats 1023 times>
>>>>>
>>>>>        len = 1024
>>>>>
>>>>>        status = <optimized out>
>>>>>
>>>>>        event = 0x0
>>>>>
>>>>>        reply = "\000OK log level  [7]", '\000' <repeats 493 times>
>>>>>
>>>>>        session = 0x0
>>>>>
>>>>>        channel = 0x0
>>>>>
>>>>>        revent = 0x0
>>>>>
>>>>>        var = <optimized out>
>>>>>
>>>>>        locked = 1
>>>>>
>>>>>        __PRETTY_FUNCTION__ = "listener_run"
>>>>>
>>>>>        __func__ = "listener_run"
>>>>>
>>>>> #8  0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at
>>>>> threadproc/unix/thread.c:151
>>>>>
>>>>>        thread = 0x7f8eb2be4868
>>>>>
>>>>> #9  0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at
>>>>> pthread_create.c:312
>>>>>
>>>>>        __res = <optimized out>
>>>>>
>>>>>        pd = 0x7f8eb2b20700
>>>>>
>>>>>        now = <optimized out>
>>>>>
>>>>>        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140250860095232,
>>>>> -640791540281233069, 0, 0, 140250860095936, 140250860095232,
>>>>> 578173923610734931, 577994035108262227}, mask_was_saved = 0}}, priv = {pad
>>>>> = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
>>>>>
>>>>>        not_first_call = <optimized out>
>>>>>
>>>>>        pagesize_m1 = <optimized out>
>>>>>
>>>>>        sp = <optimized out>
>>>>>
>>>>>        freesize = <optimized out>
>>>>>
>>>>>        __PRETTY_FUNCTION__ = "start_thread"
>>>>>
>>>>> #10 0x00007f8f00d1d47d in clone () at
>>>>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
>>>>>
>>>>> No locals
>>>>>
>>>>
>>>>
>>
>
> --
> Anthony Minessale II       ♬ @anthmfs  ♬ @FreeSWITCH  ♬
>
>http://freeswitch.org/http://cluecon.com/> http://twitter.com/FreeSWITCH
> ☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
> <http://freeswitch.org/g+>*
>
> ClueCon Weekly Development Call
> ☎ sip:888 at conference.freeswitch.org  ☎ +19193869900
>
> https://www.youtube.com/watch?v=9XXgW34t40s
> https://www.youtube.com/watch?v=NLaDpGQuZDA
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>



-- 
mandra
c:410.258.5281
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20160316/b5fd8311/attachment-0001.html 


Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users mailing list