Summary: | sys-libs/glibc-2.15-r3: nscd initscript fails while daemon starts | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | Roman Žilka <roman.zilka> |
Component: | [OLD] Core system | Assignee: | Gentoo Toolchain Maintainers <toolchain> |
Status: | RESOLVED UPSTREAM | ||
Severity: | normal | CC: | openrc |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- |
Description
Roman Žilka
2013-01-22 11:22:31 UTC
don't know why ssd is saying 'caught an interrupt' ignoring that, nscd has been changed recently to fork less which should make it easier for ssd to keep track. so if it starts working with that, i'm inclined to let that fix this issue. If it is of any help, I can confirm that with an strace -f /etc/init.d/nscd start: [pid 26707] execve("/sbin/start-stop-daemon", ["start-stop-daemon", "--start", "--quiet", "--background", "--exec", "/usr/sbin/nscd", "--pidfile", "/var/run/nscd/nscd.pid", "--"], [/* 49 vars */]) = 0 (...) [pid 26707] clone(Process 26708 attached child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x28333b539d0) = 26708 (...) [pid 26708] execve("/usr/sbin/nscd", ["/usr/sbin/nscd"], [/* 40 vars */]) = 0 (...) [pid 26708] open("/var/run/nscd/nscd.pid", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 26708] clone(Process 26709 attached child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2e0290609d0) = 26709 [pid 26709] set_robust_list(0x2e0290609e0, 24) = 0 [pid 26708] exit_group(0) = ? [pid 26709] open("/var/run/nscd/nscd.pid", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 [pid 26708] +++ exited with 0 +++ [pid 26707] <... nanosleep resumed> NULL) = ? ERESTART_RESTARTBLOCK (Interrupted by signal) (...) PID 26709 goes on living happily. SSD (26707) is nanosleep()ing for a grace period to wait for the new daemon (26708) to settle down, but the sleep is interrupted by 26708 exiting - thus the "caught an interrupt" (EINTR). SSD doesn't see 26708's fork and considers the daemon dead. Either nscd should wait in 26708 for more than SSD's grace period:), or it shouldn't fork into 26709 at all, or SSD should be taught to understand second forks, or the initscript shouldn't call SSD with "--background" as a quick&dirty fix (saw this tip somewhere on the net). I just found out this is fixed in glibc-2.16. I'm closing this in accordance with SpanKY's comment. Please, stabilize 2.16 it if this bug is enough of a reason. |