When restarting daemons ("service samba_server restart" on FreeBSD, or similar) and you have many active SMB connections (== many smbd daemons running) then there is a race between the terminating daemons and the new one starting up in conjunction with locks being torn down and initialized anew than can cause core dumps in the terminating ones (which you typically won't notice since it's happening during the termination phase and core dumps aren't enabled...)
Ie, typically many system rc scripts wait for the master process (the ones in the pid files) to terminate before assuming it's OK to start up new ones - but you really need to wait for all (smbd) processes to terminate before restarting.
1. Make the master smbd wait for all subprocesses to terminate before exiting.
(assumes the startup scripts wait for the master pid to terminate)
2. Modify all various OS system startup scripts (including smbcontrol) to wait for _all_ processes to terminate
This is how a quick-and-dirty scripted "stop" might be done that waits for
all processes to terminate instead of just blindly continuing:
for D in $DAEMONS; do
# Wait for a processes to terminate (assumes SID == MASTERPID)
while pgrep -s $MASTERPID 2>/dev/null; do
(Solaris based systems using SMF doesn't have this problem since it be default waits for all processes in the "contract" to terminate before continuing :-)
If nothing else - perhaps a note should be made in the documentation that this needs to be done?