[Freeswitch-dev] crash running the core twice in one process
Tamas
jalsot at gmail.com
Wed Jul 1 15:52:44 PDT 2009
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
More information about the Freeswitch-dev
mailing list