[Date Prev][Date Next]
RE: Can't kill idle slapds on FreeBSD 4.0
> I'm not even sure what the POSIX signal semantics ARE, so please
> forgive me if I'm being stupid here. The siginterrupt man page
> says "System call restart has been the default behaviour since
> 4.2BSD, and is the default behaviour for signal(3) on FreeBSD."
After some poking around, I think I may have figured out what's
happening. The threaded libc_r which comes with FreeBSD includes
an implementation of signal in which the default is NOT to restart
interrupted system calls. However, the libc_r Makefile does not
include signal.o in HIDDEN_SYSCALLS, so the libc version (with
conflicting semantics) is used instead.
Including a signal implementation which calls sigaction with sa_flags = 0
solved the problem. Note that calling siginterrupt doesn't help,
presumably because it is not thread aware.
Does this make sense? And if so, is this a FreeBSD bug, or just an
OpenLDAP porting issue?