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 <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:213-799-1400