Bug 60013

Summary: isdnlog dies after finishing init-stage
Product: [Retired] Red Hat Linux Reporter: Enrico Scholz <rh-bugzilla>
Component: isdn4k-utilsAssignee: Than Ngo <than>
Status: CLOSED RAWHIDE QA Contact: Aaron Brown <abrown>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.3   
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2002-02-21 11:57:20 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Enrico Scholz 2002-02-19 01:38:23 UTC
Description of Problem:

isdnlog (started by isdn-initscript) dies when rc.sysinit has been
finished. I could track it down to isdnlog/isdnlog/isdnlog.c:615

| while ((Cnt = select(maxdesc+1, &readmask, NULL, &exceptmask, Get_Interval(Interval))) < 0 && (errno == EINTR));

where the select() exits with EBADF. While rc.sysinit is running, the
following descriptors are open:

| COMMAND PID USER   FD   TYPE     DEVICE     SIZE   NODE NAME
| isdnlog 384 root  cwd    DIR        3,9     1024      2 /
| isdnlog 384 root  rtd    DIR        3,9     1024      2 /
| isdnlog 384 root  txt    REG        3,9  3402412  10383 /sbin/isdnlog
| isdnlog 384 root  mem    REG        3,9   100410   6055 /lib/ld-2.2.90.so
| isdnlog 384 root  mem    REG        3,9   166592   8551 /lib/libm-2.2.90.so
| isdnlog 384 root  mem    REG        3,9  1405380   6031 /lib/libc-2.2.90.so
| isdnlog 384 root  mem    REG        3,9    53075   8708 /lib/libnss_files-2.2.90.so
| isdnlog 384 root    0u   CHR        5,1           12146 /dev/console
| isdnlog 384 root    1u   CHR        1,3           12058 /dev/null
| isdnlog 384 root    2u   CHR        1,3           12058 /dev/null
| isdnlog 384 root    3w   REG        3,7 71467337 189443 /var/log/isdn/isdnlog.err
| isdnlog 384 root    4r   CHR     45,255           13316 /dev/isdninfo
| isdnlog 384 root    5r   CHR      45,64           13252 /dev/isdnctrl0
| isdnlog 384 root    6w   REG        3,9  1325334  20082 /tmp/isdnctrl0
| isdnlog 384 root    7r   REG        3,6    77824 126368 /usr/lib/isdn/dest.cdb
| isdnlog 384 root    8u  IPv4        762             TCP *:isdnlog (LISTEN)
| isdnlog 384 root    9u  unix 0xcbae4440             897 socket
| isdnlog 384 root   10r   REG        3,6   582016 127601 /usr/lib/isdn/zone-de-dtag.cdb

select() tests the fds 4,5 and 8. Shortly after the select() fails
only these fds are active:

| COMMAND   PID USER   FD   TYPE     DEVICE    SIZE   NODE NAME
| isdnlog 12081 root  cwd    DIR        3,9    1024      2 /
| isdnlog 12081 root  rtd    DIR        3,9    1024      2 /
| isdnlog 12081 root  txt    REG        3,9 3402476  10383 /sbin/isdnlog
| isdnlog 12081 root  mem    REG        3,9  100410   6055 /lib/ld-2.2.90.so
| isdnlog 12081 root  mem    REG        3,9  166592   8551 /lib/libm-2.2.90.so
| isdnlog 12081 root  mem    REG        3,9 1405380   6031 /lib/libc-2.2.90.so
| isdnlog 12081 root  mem    REG        3,9   53075   8708 /lib/libnss_files-2.2.90.so
| isdnlog 12081 root    0u   CHR        5,1          12146 /dev/console
| isdnlog 12081 root    1u   CHR        1,3          12058 /dev/null
| isdnlog 12081 root    2u   CHR        1,3          12058 /dev/null
| isdnlog 12081 root    4u  unix 0xcbd95400         126259 socket
| isdnlog 12081 root    6w   REG        3,9 1322079  20082 /tmp/isdnctrl0
| isdnlog 12081 root    7r   REG        3,6   77824 126368 /usr/lib/isdn/dest.cdb
| isdnlog 12081 root   10r   REG        3,6  582016 127601 /usr/lib/isdn/zone-de-dtag.cdb

This issue is difficulty to debug since the only trigger seems to be
finishing the init-stage.

Since the authors of isdnlog know about the instability of isdnlog
they have built in a restart-facility. Unfortunately, this mechanism
requires the full pathname of isdnlog in argv[0] so I suggest to patch
/etc/init.d/isdn in a way like

|        if [ -f /etc/isdn/isdnlog.option ] ; then
|-            daemon isdnlog /dev/isdnctrl0 -D -f /etc/isdn/isdnlog.option
|+            daemon /sbin/isdnlog /dev/isdnctrl0 -D -f /etc/isdn/isdnlog.option
|        else
|-            daemon isdnlog /dev/isdnctrl0 -x0x3fff -M -w2 -S -D -s -O+/var/log/isdnctrl
|+            daemon /sbin/isdnlog /dev/isdnctrl0 -x0x3fff -M -w2 -S -D -s -O+/var/log/isdnctrl
|        fi

This does not cure the bug above but will enable isdnlog to restart
after this and other failures.


Version-Release number of selected component (if applicable):

isdn4k-utils-3.1-49


Additional Information:

Previous versions with other environments (glibc/gcc) but same
configuration have not shown this bug.

Comment 1 Than Ngo 2002-02-22 21:59:16 UTC
It's fixed in 3.1-52. Thanks for your fix.