<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">depends on your needs. &nbsp;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. &nbsp;Anthony is suggesting looking at how we do it in other places. &nbsp;Life cycle could be an issue, are you destroying things too early?<div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 16, 2016, at 5:00 AM, Chris Mandra &lt;<a href="mailto:mandra@gmail.com" class="">mandra@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Thanks for responding Anthony. Can you tell me this:</span><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><font size="2" style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="background-color: rgba(255, 255, 255, 0);" class="">Should curl calls be done in separate thread or is it ok to do them in the&nbsp;main thread of modules?</span></font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">On Tuesday, March 15, 2016, Chris Mandra &lt;</span><a href="mailto:mandra@gmail.com" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">mandra@gmail.com</a><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">&gt; wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote class="gmail_quote" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><br class="">Should curl calls be done in separate thread or is it ok to do them in the&nbsp;main thread of modules?<span class=""></span><br class="">On Tuesday, March 15, 2016, Anthony Minessale &lt;<a target="_blank" class="">anthony.minessale@gmail.com</a>&gt; wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Curl is used in a few places and is not unstable.&nbsp; Study some of those mods and maybe you can see how to use it in a typical situation.&nbsp; Probably its related to memory management or lifecycle of objects you may be using.<span class=""></span><br class=""><br class="">On Tuesday, March 15, 2016, Chris Mandra &lt;<a class="">mandra@gmail.com</a>&gt; wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div dir="ltr" class=""><div class="">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.&nbsp;</div><div class=""><p class=""><span class="">In switch_standard_app I use switch_curl and invoke switch_curl_easy_perform&nbsp;</span>and exit after that.</p><p class="">Calling switch_curl seems very unstable. It's crashing free switch most of the time.&nbsp; Are there any things I&nbsp;should be looking for related to this? I'm wondering if maybe this is a threading issue? Any ideas?</p></div><div class=""><div class="">I've included some backtraces</div><div class=""><br class=""></div><div class=""><div class="">Thanks, chris</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><p class=""><span class="">(gdb) bt</span></p><p class=""><span class="">#0 &nbsp;0x00007f8f00c59cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56</span></p><p class=""><span class="">#1 &nbsp;0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89</span></p><p class=""><span class="">#2 &nbsp;0x00007f8f00c96394 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175</span></p><p class=""><span class="">#3 &nbsp;0x00007f8f00ca266e in malloc_printerr (ptr=&lt;optimized out&gt;, str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996</span></p><p class=""><span class="">#4 &nbsp;_int_free (av=&lt;optimized out&gt;, p=&lt;optimized out&gt;, have_lock=0) at malloc.c:3840</span></p><p class=""><span class="">#5 &nbsp;0x00007f8f01334567 in switch_log_node_free (pnode=pnode@entry=0x7f8eb2b1f158) at src/switch_log.c:136</span></p><p class=""><span class="">#6 &nbsp;0x00007f8eeb192a24 in read_packet (listener=listener@entry=0x7f8ebc027898, event=event@entry=0x7f8eb2b1f7f0, timeout=timeout@entry=0) at mod_event_socket.c:1361</span></p><p class=""><span class="">#7 &nbsp;0x00007f8eeb1988a0 in listener_run (thread=&lt;optimized out&gt;, obj=0x7f8ebc027898) at mod_event_socket.c:2719</span></p><p class=""><span class="">#8 &nbsp;0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at threadproc/unix/thread.c:151</span></p><p class=""><span class="">#9 &nbsp;0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at pthread_create.c:312</span></p><p class=""><span class="">#10 0x00007f8f00d1d47d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111</span></p><p class=""><span class=""><i class=""></i></span><br class=""></p><p class=""><span class=""><a href="https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027" target="_blank" class=""><i class="">[</i><span class=""><i class=""></i></span></a></span></p><p class=""><span class=""><a href="https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027" target="_blank" class="">5:44<span class=""></span></a></span></p><p class=""><span class=""><a href="https://soniccloud.slack.com/archives/D02UEC39S/p1458078254000027" target="_blank" class=""><i class="">]</i><span class=""><i class=""></i></span></a></span></p><p class=""><span class="">(gdb) bt full</span></p><p class=""><span class="">#0 &nbsp;0x00007f8f00c59cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;resultvar = 0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;pid = 18329</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;selftid = 18421</span></p><p class=""><span class="">#1 &nbsp;0x00007f8f00c5d0d8 in __GI_abort () at abort.c:89</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;save_stage = 2</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0 &lt;repeats 16 times&gt;}}, sa_flags = 0, sa_restorer = 0x0}</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;sigs = {__val = {32, 0 &lt;repeats 15 times&gt;}}</span></p><p class=""><span class="">#2 &nbsp;0x00007f8f00c96394 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7f8f00da4b28 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;ap = {{gp_offset = 40, fp_offset = 32654, overflow_arg_area = 0x7f8eb2b1f010, reg_save_area = 0x7f8eb2b1efa0}}</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;fd = 2</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;on_2 = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;list = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;nlist = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;cp = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;written = &lt;optimized out&gt;</span></p><p class=""><span class="">#3 &nbsp;0x00007f8f00ca266e in malloc_printerr (ptr=&lt;optimized out&gt;, str=0x7f8f00da0c19 "free(): invalid pointer", action=1) at malloc.c:4996</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;buf = "00007f8ed0036700"</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;cp = &lt;optimized out&gt;</span></p><p class=""><span class="">#4 &nbsp;_int_free (av=&lt;optimized out&gt;, p=&lt;optimized out&gt;, have_lock=0) at malloc.c:3840</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;size = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;fb = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;nextchunk = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;nextsize = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;nextinuse = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;prevsize = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;bck = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;fwd = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;errstr = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;locked = &lt;optimized out&gt;</span></p><p class=""><span class="">#5 &nbsp;0x00007f8f01334567 in switch_log_node_free (pnode=pnode@entry=0x7f8eb2b1f158) at src/switch_log.c:136</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;node = 0x7f8ed8012ab0</span></p><p class=""><span class="">#6 &nbsp;0x00007f8eeb192a24 in read_packet (listener=listener@entry=0x7f8ebc027898, event=event@entry=0x7f8eb2b1f7f0, timeout=timeout@entry=0) at mod_event_socket.c:1361</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;dnode = 0x7f8ed8012ab0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;do_sleep = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;mlen = 0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;bytes = 0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;mbuf = 0x7f8ecc1ebfc0 ""</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;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"...</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;len = 88</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;status = SWITCH_STATUS_BREAK</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;count = 0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;elapsed = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;start = 1457966137</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;pop = 0x7f8ed8012ab0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;ptr = 0x7f8ecc1ebfc0 ""</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;crcount = 0 '\000'</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;buf_len = 2048</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;channel = 0x0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;clen = 0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__PRETTY_FUNCTION__ = "read_packet"</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__func__ = "read_packet"</span></p><p class=""><span class="">#7 &nbsp;0x00007f8eeb1988a0 in listener_run (thread=&lt;optimized out&gt;, obj=0x7f8ebc027898) at mod_event_socket.c:2719</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;listener = 0x7f8ebc027898</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;buf = '\000' &lt;repeats 1023 times&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;len = 1024</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;status = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;event = 0x0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;reply = "\000OK log level &nbsp;[7]", '\000' &lt;repeats 493 times&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;session = 0x0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;channel = 0x0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;revent = 0x0</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;var = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;locked = 1</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__PRETTY_FUNCTION__ = "listener_run"</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__func__ = "listener_run"</span></p><p class=""><span class="">#8 &nbsp;0x00007f8f01544430 in dummy_worker (opaque=0x7f8eb2be4868) at threadproc/unix/thread.c:151</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;thread = 0x7f8eb2be4868</span></p><p class=""><span class="">#9 &nbsp;0x00007f8f00ff0182 in start_thread (arg=0x7f8eb2b20700) at pthread_create.c:312</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__res = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;pd = 0x7f8eb2b20700</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;now = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;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}}}</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;not_first_call = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;pagesize_m1 = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;sp = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;freesize = &lt;optimized out&gt;</span></p><p class=""><span class="">&nbsp; &nbsp; &nbsp; &nbsp;__PRETTY_FUNCTION__ = "start_thread"</span></p><p class=""><span class="">#10 0x00007f8f00d1d47d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111</span></p><p class=""><span class="">No locals</span></p></div></div></div></blockquote><br class=""></blockquote></blockquote></div></blockquote></div><br class=""></div></body></html>