[Date Prev][Date Next] [Chronological] [Thread] [Top]

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?