look in switch.c

we do it when you say "fsctl shutdown restart" and it works fine over and over.



On Wed, Jul 1, 2009 at 5:52 PM, Tamas <jalsot@gmail.com> wrote:
Hello,

I'm trying to embed FS in a C application where I should have to restart
the whole stuff (core) in one process/thread, however it crashes. I
assume, something is not freed up before the new startup. I've used
mrene's fshost example to reproduce the issue:

Index: contrib/mrene/fshost/main.c
===================================================================
--- contrib/mrene/fshost/main.c    (revision 14092)
+++ contrib/mrene/fshost/main.c    (working copy)
 -82,7 +82,34 @@

        ret = system(buf);
    }
+
+
+    /* Here I start my 2nd start */
+
+    /* Initialize libs & globals */
+    printf("Initializing globals...\n");
+    switch_core_setrlimits();
+    switch_core_set_globals();

+    /* If you need to override configuration directories, you need to
change them in the SWITCH_GLOBAL_dirs global structure */
+    printf("Initializing core...\n");
+    /* Initialize the core and load modules, that will startup FS
completely */
+    if (switch_core_init_and_modload(flags, console, &err) !=
SWITCH_STATUS_SUCCESS) {
+        fprintf(stderr, "Failed to initialize FreeSWITCH's core: %s\n",
err);
+        return 1;
+    }
+
+    printf("Everything OK, Entering runtime loop.\n");
+
+    fflush(stdout);
+
+    /* Go into the runtime loop. If the argument is true, this
basically sets runtime.running = 1 and loops while that is set
+     * If its false, it initializes the libedit for the console, then
does the same thing
+     */
+    switch_core_runtime_loop(!console);
+
+    /* When the runtime loop exits, its time to shutdown */
+    destroy_status = switch_core_destroy();
    return ret;
 }

 -95,4 +122,4 @@
 * End:
 * For VIM:
 * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
- */
\ No newline at end of file
+ */


Here are some gdb backtraces:

(gdb) bt
#0  0x00007fb418c94a7f in apr_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at misc/apr_queue.c:215
#1  0x00007fb418c0464a in switch_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at src/switch_apr.c:931
#2  0x00007fb418c3bab8 in switch_event_thread (thread=0x1663a98,
obj=0x12b8398) at src/switch_event.c:305
#3  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663a98) at
threadproc/unix/thread.c:138
#4  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
#5  0x00007fb418933fcd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()
(gdb) bt full
#0  0x00007fb418c94a7f in apr_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at misc/apr_queue.c:215
       rv = 0
#1  0x00007fb418c0464a in switch_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at src/switch_apr.c:931
       s = 0
#2  0x00007fb418c3bab8 in switch_event_thread (thread=0x1663a98,
obj=0x12b8398) at src/switch_event.c:305
       pop = 0x12b4b60
       event = 0x12b4b60
       queue = 0x12b8398
       index = 0
       my_id = 0
       __func__ = "switch_event_thread"
#3  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663a98) at
threadproc/unix/thread.c:138
       thread = 0x1663a98
#4  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0x00007fb418933fcd in clone () from /lib/libc.so.6
No symbol table info available.
#6  0x0000000000000000 in ?? ()
No symbol table info available.


(gdb) thread apply all bt

Thread 5 (Thread 31286):
#0  0x00007fb41892c742 in select () from /lib/libc.so.6
#1  0x00007fb418caab2a in apr_sleep (t=100000) at time/unix/time.c:246
#2  0x00007fb418c7aba5 in do_sleep (t=100000) at src/switch_time.c:109
#3  0x00007fb418c7ad95 in switch_sleep (t=100000) at src/switch_time.c:178
#4  0x00007fb418c16b75 in pool_thread (thread=0x1417ff8, obj=0x0) at
src/switch_core_memory.c:531
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1417ff8) at
threadproc/unix/thread.c:138
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
#8  0x0000000000000000 in ?? ()

Thread 4 (Thread 31264):
#0  0x00007fb417ffbbc5 in __lll_unlock_wake () from /lib/libpthread.so.0
#1  0x00007fb417ff85c9 in _L_unlock_56 () from /lib/libpthread.so.0
#2  0x00007fb417ff8206 in __pthread_mutex_unlock_usercnt () from
/lib/libpthread.so.0
#3  0x00007fb418ca12de in apr_thread_mutex_unlock (mutex=0x12b83d8) at
locks/unix/thread_mutex.c:121
#4  0x00007fb418c94b78 in apr_queue_trypush (queue=0x12b8398,
data=0x12b4b60) at misc/apr_queue.c:242
#5  0x00007fb418c0464a in switch_queue_trypush (queue=0x12b8398,
data=0x12b4b60) at src/switch_apr.c:931
#6  0x00007fb418c3dfe8 in switch_event_fire_detailed
(file=0x7fb418d55ce0 "src/switch_xml.c", func=0x7fb418d562f0
"switch_xml_open_root", line=1918, event=0x7fff211d0a58, user_data=0x0)
   at src/switch_event.c:1128
#7  0x00007fb418c76a66 in switch_xml_open_root (reload=0 '\0',
err=0x7fff211d1110) at src/switch_xml.c:1918
#8  0x00007fb418c76b5e in switch_xml_init (pool=0x126aff8,
err=0x7fff211d1110) at src/switch_xml.c:1945
#9  0x00007fb418c2d78f in switch_core_init (flags=1,
console=SWITCH_TRUE, err=0x7fff211d1110) at src/switch_core.c:1231
#10 0x00007fb418c2e02b in switch_core_init_and_modload (flags=1,
console=SWITCH_TRUE, err=0x7fff211d1110) at src/switch_core.c:1422
#11 0x0000000000400ed7 in main (argc=1, argv=0x7fff211d1628) at main.c:97

Thread 3 (Thread 31288):
#0  0x00007fb417ff92e9 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib/libpthread.so.0
#1  0x00007fb418ca13ef in apr_thread_cond_wait (cond=0x14dbb08,
mutex=0x14dbab8) at locks/unix/thread_cond.c:68
#2  0x00007fb418c94c1f in apr_queue_pop (queue=0x14dba78,
data=0x7fb41676c0b8) at misc/apr_queue.c:276
#3  0x00007fb418c045ca in switch_queue_pop (queue=0x14dba78,
data=0x7fb41676c0b8) at src/switch_apr.c:902
#4  0x00007fb418c3ba5e in switch_event_thread (thread=0x1663ac8,
obj=0x14dba78) at src/switch_event.c:289
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663ac8) at
threadproc/unix/thread.c:138
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
#8  0x0000000000000000 in ?? ()

Thread 2 (Thread 31289):
#0  0x00007fb417ff92e9 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib/libpthread.so.0
#1  0x00007fb418ca13ef in apr_thread_cond_wait (cond=0x159fb18,
mutex=0x159fac8) at locks/unix/thread_cond.c:68
#2  0x00007fb418c94c1f in apr_queue_pop (queue=0x159fa88,
data=0x7fb4167a80b8) at misc/apr_queue.c:276
#3  0x00007fb418c045ca in switch_queue_pop (queue=0x159fa88,
data=0x7fb4167a80b8) at src/switch_apr.c:902
#4  0x00007fb418c3ba5e in switch_event_thread (thread=0x1663af8,
obj=0x159fa88) at src/switch_event.c:289
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663af8) at
threadproc/unix/thread.c:138
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
#8  0x0000000000000000 in ?? ()

Thread 1 (Thread 31287):
#0  0x00007fb418c94a7f in apr_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at misc/apr_queue.c:215
#1  0x00007fb418c0464a in switch_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at src/switch_apr.c:931
#2  0x00007fb418c3bab8 in switch_event_thread (thread=0x1663a98,
obj=0x12b8398) at src/switch_event.c:305
#3  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663a98) at
threadproc/unix/thread.c:138
#4  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
#5  0x00007fb418933fcd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

(gdb) thread apply all bt full

Thread 5 (Thread 31286):
#0  0x00007fb41892c742 in select () from /lib/libc.so.6
No symbol table info available.
#1  0x00007fb418caab2a in apr_sleep (t=100000) at time/unix/time.c:246
       tv = {tv_sec = 0, tv_usec = 88462}
#2  0x00007fb418c7aba5 in do_sleep (t=100000) at src/switch_time.c:109
No locals.
#3  0x00007fb418c7ad95 in switch_sleep (t=100000) at src/switch_time.c:178
No locals.
#4  0x00007fb418c16b75 in pool_thread (thread=0x1417ff8, obj=0x0) at
src/switch_core_memory.c:531
       len = 0
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1417ff8) at
threadproc/unix/thread.c:138
       thread = 0x1417ff8
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
No symbol table info available.
#8  0x0000000000000000 in ?? ()
No symbol table info available.

Thread 4 (Thread 31264):
#0  0x00007fb417ffbbc5 in __lll_unlock_wake () from /lib/libpthread.so.0
No symbol table info available.
#1  0x00007fb417ff85c9 in _L_unlock_56 () from /lib/libpthread.so.0
No symbol table info available.
#2  0x00007fb417ff8206 in __pthread_mutex_unlock_usercnt () from
/lib/libpthread.so.0
No symbol table info available.
#3  0x00007fb418ca12de in apr_thread_mutex_unlock (mutex=0x12b83d8) at
locks/unix/thread_mutex.c:121
       status = 0
#4  0x00007fb418c94b78 in apr_queue_trypush (queue=0x12b8398,
data=0x12b4b60) at misc/apr_queue.c:242
       rv = 0
#5  0x00007fb418c0464a in switch_queue_trypush (queue=0x12b8398,
data=0x12b4b60) at src/switch_apr.c:931
       s = 0
#6  0x00007fb418c3dfe8 in switch_event_fire_detailed
(file=0x7fb418d55ce0 "src/switch_xml.c", func=0x7fb418d562f0
"switch_xml_open_root", line=1918, event=0x7fff211d0a58, user_data=0x0)
   at src/switch_event.c:1128
       was = 0
       index = 0
       __PRETTY_FUNCTION__ = "switch_event_fire_detailed"
       __func__ = "switch_event_fire_detailed"
#7  0x00007fb418c76a66 in switch_xml_open_root (reload=0 '\0',
err=0x7fff211d1110) at src/switch_xml.c:1918
       event = 0x12b4b60
       path_buf =
"/opt/freeswitch/conf/freeswitch.xml\0\0\0\0\0\340\33\"\1\0\0\0\0\0\320\34\31\264\177\0\0)'\214\30\264\177\0\0\6\0\0\0\b\0\0\1\200\247\273\30\264\177\0\0\0\0\0\0\0\0\0\0\340\33\"\1\0\0\0\0O\0\0\0\0\0\0\0\271\24\214\0\0\4\0\0`\6\35!\377\177\0\0@\16\35!\377\177\0\0\340\33\"\1\0\0\0\0\0\272\273\30\264\177\0\0p\r\35!\377\177\0\0`\v@\0\0\0\0\0
\26\35!\377\177", '\0' <repeats 18 times>,
"v\202\214\30\264\177\0\0\71\0\0\0\0\0\0\0\224\t\307\30\264\177\0\0\65\2\0\0\60\0\0\0\200\0\0\0\377\177\0\0\6\0\325\30\264\177\0\0\263\352\16\0\377\177\0\0\320\v\35!\377"...
       hasmain = 0 '\0'
       errcnt = 0 '\0'
       new_main = 0x1221ca0
       r = 0x0
       __func__ = "switch_xml_open_root"
#8  0x00007fb418c76b5e in switch_xml_init (pool=0x126aff8,
err=0x7fff211d1110) at src/switch_xml.c:1945
       xml = 0x12b8338
       __PRETTY_FUNCTION__ = "switch_xml_init"
---Type <return> to continue, or q <return> to quit---
#9  0x00007fb418c2d78f in switch_core_init (flags=1,
console=SWITCH_TRUE, err=0x7fff211d1110) at src/switch_core.c:1231
       uuid = {data = "\0\0\0\0\0\0\0\0\200\247\273\30\264\177\0"}
       guess_ip = "::1\0\61\66\70.69.69", '\0' <repeats 187
times>"\331,
_\222\30\264\177\0\0\0\0\0\0\0\0\0\0\25\0\0\0\0\0\0\0\0\320\34\31\264\177\0\0\25",
'\0' <repeats 15 times>, "J\30\214\30\264\177\0"
       dir_path = 0x0
       mask = 16777215
       in = {s_addr = 16777215}
       __PRETTY_FUNCTION__ = "switch_core_init"
#10 0x00007fb418c2e02b in switch_core_init_and_modload (flags=1,
console=SWITCH_TRUE, err=0x7fff211d1110) at src/switch_core.c:1422
       event = 0x400b60
       __func__ = "switch_core_init_and_modload"
#11 0x0000000000400ed7 in main (argc=1, argv=0x7fff211d1628) at main.c:97
       flags = 1
       err = 0x7fb418d56314 "Success"
       console = SWITCH_TRUE
       destroy_status = SWITCH_STATUS_SUCCESS
       ret = 0
       __PRETTY_FUNCTION__ = "main"

Thread 3 (Thread 31288):
#0  0x00007fb417ff92e9 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib/libpthread.so.0
No symbol table info available.
#1  0x00007fb418ca13ef in apr_thread_cond_wait (cond=0x14dbb08,
mutex=0x14dbab8) at locks/unix/thread_cond.c:68
       rv = 0
#2  0x00007fb418c94c1f in apr_queue_pop (queue=0x14dba78,
data=0x7fb41676c0b8) at misc/apr_queue.c:276
       rv = 0
#3  0x00007fb418c045ca in switch_queue_pop (queue=0x14dba78,
data=0x7fb41676c0b8) at src/switch_apr.c:902
No locals.
#4  0x00007fb418c3ba5e in switch_event_thread (thread=0x1663ac8,
obj=0x14dba78) at src/switch_event.c:289
       pop = 0x0
       event = 0x0
       queue = 0x14dba78
       index = 0
       my_id = 1
       __func__ = "switch_event_thread"
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663ac8) at
threadproc/unix/thread.c:138
       thread = 0x1663ac8
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
No symbol table info available.
#8  0x0000000000000000 in ?? ()
No symbol table info available.

Thread 2 (Thread 31289):
#0  0x00007fb417ff92e9 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib/libpthread.so.0
No symbol table info available.
#1  0x00007fb418ca13ef in apr_thread_cond_wait (cond=0x159fb18,
mutex=0x159fac8) at locks/unix/thread_cond.c:68
       rv = 0
#2  0x00007fb418c94c1f in apr_queue_pop (queue=0x159fa88,
data=0x7fb4167a80b8) at misc/apr_queue.c:276
       rv = 0
#3  0x00007fb418c045ca in switch_queue_pop (queue=0x159fa88,
data=0x7fb4167a80b8) at src/switch_apr.c:902
No locals.
#4  0x00007fb418c3ba5e in switch_event_thread (thread=0x1663af8,
obj=0x159fa88) at src/switch_event.c:289
---Type <return> to continue, or q <return> to quit---
       pop = 0x0
       event = 0x0
       queue = 0x159fa88
       index = 0
       my_id = 2
       __func__ = "switch_event_thread"
#5  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663af8) at
threadproc/unix/thread.c:138
       thread = 0x1663af8
#6  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#7  0x00007fb418933fcd in clone () from /lib/libc.so.6
No symbol table info available.
#8  0x0000000000000000 in ?? ()
No symbol table info available.

Thread 1 (Thread 31287):
#0  0x00007fb418c94a7f in apr_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at misc/apr_queue.c:215
       rv = 0
#1  0x00007fb418c0464a in switch_queue_trypush (queue=0x7fb4168e45a8,
data=0x12b4b60) at src/switch_apr.c:931
       s = 0
#2  0x00007fb418c3bab8 in switch_event_thread (thread=0x1663a98,
obj=0x12b8398) at src/switch_event.c:305
       pop = 0x12b4b60
       event = 0x12b4b60
       queue = 0x12b8398
       index = 0
       my_id = 0
       __func__ = "switch_event_thread"
#3  0x00007fb418ca8c01 in dummy_worker (opaque=0x1663a98) at
threadproc/unix/thread.c:138
       thread = 0x1663a98
#4  0x00007fb417ff53ba in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0x00007fb418933fcd in clone () from /lib/libc.so.6
No symbol table info available.
#6  0x0000000000000000 in ?? ()
No symbol table info available.


FS svn r14092, gcc-4.3.3, x86_64

Any idea what should I add to free up everything after shutdown and lets
start with "blank list"?

Thanks in advance,
   Tamas


_______________________________________________
Freeswitch-dev mailing list
Freeswitch-dev@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
http://www.freeswitch.org



--
Anthony Minessale II

FreeSWITCH http://www.freeswitch.org/
ClueCon http://www.cluecon.com/

AIM: anthm
MSN:anthony_minessale@hotmail.com
GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com
IRC: irc.freenode.net #freeswitch

FreeSWITCH Developer Conference
sip:888@conference.freeswitch.org
iax:guest@conference.freeswitch.org/888
googletalk:conf+888@conference.freeswitch.org
pstn:213-799-1400