[Serdev] [Tracker] Resolved: (SER-210) self-shutdown deadlock when
module's child_init returns -1 result value
Andrei Pelinescu - Onciul (JIRA)
tracker at iptel.org
Thu Jan 18 20:09:39 UTC 2007
[ http://tracker.iptel.org/browse/SER-210?page=all ]
Andrei Pelinescu - Onciul resolved SER-210.
-------------------------------------------
Resolution: Fixed
fixed on the latest cvs, see http://lists.iptel.org/pipermail/serdev/2007-January/008851.html
> self-shutdown deadlock when module's child_init returns -1 result value
> -----------------------------------------------------------------------
>
> Key: SER-210
> URL: http://tracker.iptel.org/browse/SER-210
> Project: SER
> Issue Type: Bug
> Affects Versions: Ottendorf
> Environment: debian, CVS HEAD
> Reporter: Michal Matyska
> Assigned To: Andrei Pelinescu - Onciul
> Fix For: Ottendorf
>
>
> Change one of the modules to return -1 result from child_init call (I selected sl module, see patch)
> diff -u -r1.31 sl.c
> --- modules/sl/sl.c 19 Jul 2006 15:17:57 -0000 1.31
> +++ modules/sl/sl.c 18 Jan 2007 10:12:32 -0000
> @@ -142,10 +142,10 @@
> static int child_init(int rank)
> {
> if (rank == 1) {
> - if (init_sl_stats_child() < 0) {
> +// if (init_sl_stats_child() < 0) {
> ERR("init_sl_stats_child failed\n");
> return -1;
> - }
> +// }
> }
> return 0;
> }
> Then start ser with the minimalistic config file:
> listen=lo
> loadmodule "./modules/sl/sl.so"
> route{
> forward_udp("10.0.0.1");
> }
> When the childs are forked and child_init is called, the sl module returns -1 and the main process starts the suicide, but does not finish it.
> SER output:
> michal at broucek:/work/ser/HEAD$ ./ser -f ../testchldinit.cfg -ddDDE
> Listening on
> udp: 127.0.0.1 [127.0.0.1]:5060
> tcp: 127.0.0.1 [127.0.0.1]:5060
> Aliases:
> tcp: localhost:5060
> udp: localhost:5060
> 1(19319) ERROR: sl.c:146: init_sl_stats_child failed
> 1(19319) init_mod_child(): Error while initializing module sl
> 1(19319) ERROR: fork_process(): init_child failed for process 1, pid 19319, ""
> 1(19319) main_loop: Cannot fork
> 19(19337) ERROR: receive_fd: EOF on 5
> michal at broucek:/work/ser/HEAD$ ps ax | grep ser
> 19318 pts/0 R+ 6:49 ./ser -f ../testchldinit.cfg -ddDDE
> 19320 pts/0 Z+ 0:00 [ser] <defunct>
> 19321 pts/0 Z+ 0:00 [ser] <defunct>
> 19322 pts/0 Z+ 0:00 [ser] <defunct>
> 19323 pts/0 Z+ 0:00 [ser] <defunct>
> 19324 pts/0 Z+ 0:00 [ser] <defunct>
> 19325 pts/0 Z+ 0:00 [ser] <defunct>
> 19326 pts/0 Z+ 0:00 [ser] <defunct>
> 19327 pts/0 Z+ 0:00 [ser] <defunct>
> 19328 pts/0 Z+ 0:00 [ser] <defunct>
> 19329 pts/0 Z+ 0:00 [ser] <defunct>
> 19330 pts/0 Z+ 0:00 [ser] <defunct>
> 19331 pts/0 Z+ 0:00 [ser] <defunct>
> 19332 pts/0 Z+ 0:00 [ser] <defunct>
> 19333 pts/0 Z+ 0:00 [ser] <defunct>
> 19334 pts/0 Z+ 0:00 [ser] <defunct>
> 19335 pts/0 Z+ 0:00 [ser] <defunct>
> 19336 pts/0 Z+ 0:00 [ser] <defunct>
> 19337 pts/0 Z+ 0:00 [ser] <defunct>
> 19365 pts/1 R+ 0:00 grep ser
> michal at broucek:/work/ser/HEAD$ gdb ser
> GNU gdb 6.4.90-debian
> Copyright (C) 2006 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1".
> (gdb) attach 19318
> Attaching to program: /work/ser/HEAD/ser, process 19318
> Reading symbols from /lib/tls/libdl.so.2...done.
> Loaded symbols for /lib/tls/libdl.so.2
> Reading symbols from /lib/tls/libresolv.so.2...done.
> Loaded symbols for /lib/tls/libresolv.so.2
> Reading symbols from /lib/tls/libc.so.6...done.
> Loaded symbols for /lib/tls/libc.so.6
> Reading symbols from /lib/ld-linux.so.2...done.
> Loaded symbols for /lib/ld-linux.so.2
> Reading symbols from /work/ser/HEAD/modules/sl/sl.so...done.
> Loaded symbols for ./modules/sl/sl.so
> Reading symbols from /lib/tls/libnss_files.so.2...done.
> Loaded symbols for /lib/tls/libnss_files.so.2
> Reading symbols from /usr/lib/libnss_db.so.2...done.
> Loaded symbols for /usr/lib/libnss_db.so.2
> Reading symbols from /usr/lib/libdb-4.3.so...done.
> Loaded symbols for /usr/lib/libdb-4.3.so
> Failed to read a valid object file image from memory.
> 0xb7efaaa7 in sched_yield () from /lib/tls/libc.so.6
> (gdb) bt
> #0 0xb7efaaa7 in sched_yield () from /lib/tls/libc.so.6
> #1 0x0807ba0d in kill_all_children (signum=15) at mem/../fastlock.h:323
> #2 0x0807cbb5 in handle_sigs () at main.c:598
> #3 0x0807d03e in main_loop () at main.c:1085
> #4 0x0807e969 in main (argc=Cannot access memory at address 0x1
> ) at main.c:1579
> If I start ser with -ddDE then the exit is successfull (no fork mode).
> If there is no -D option (fork and exit the main process) the result is little bit different:
> 1(19375) ERROR: sl.c:146: init_sl_stats_child failed
> 1(19375) init_mod_child(): Error while initializing module sl
> 1(19375) ERROR: fork_process(): init_child failed for process 1, pid 19375, ""
> 1(19375) main_loop: Cannot fork
> 19374 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19375 ? Z 0:00 [ser] <defunct>
> 19377 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19378 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19379 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19380 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19381 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19382 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19383 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19384 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19385 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19386 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19387 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19388 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19389 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19390 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19391 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19392 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19393 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> 19394 ? S 0:00 ./ser -f ../testchldinit.cfg -ddE
> (gdb) attach 19374
> (gdb) bt
> #0 0xb7ebdf21 in pause () from /lib/tls/libc.so.6
> #1 0x0807d039 in main_loop () at main.c:1084
> #2 0x0807e969 in main (argc=1313407092, argv=0x203a4f46) at main.c:1579
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://tracker.iptel.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the Serdev
mailing list