ctdb-daemon: Check PID in ctdb_remove_pidfile(), not unreliable flag
authorMartin Schwenke <martin@meltin.net>
Mon, 30 Jun 2014 07:22:14 +0000 (17:22 +1000)
committerAmitay Isaacs <amitay@samba.org>
Sat, 5 Jul 2014 04:51:13 +0000 (06:51 +0200)
commite454e5ac9c8ed77409d9fa4463b2b29985e67e10
tree731c954d959694768be0a25bfa84c72ca06888d6
parentc7b3be97d96ee5a17bb88dceec42c57e9bf69c5d
ctdb-daemon: Check PID in ctdb_remove_pidfile(), not unreliable flag

If something unexpectedly uses fork() then an exiting child will
remove the PID file while the main daemon is still running.  The real
test is whether the current process has the PID of the main CTDB
daemon, which is the process that calls setsid().

This could be done using getpgrp() instead.  At the moment the
eventscript handler harmlessly calls setpgid() - harmless because the
atexit() handlers are cleared upon exec().  However, it is possible
that process groups will be used more in future so it is probably
better to rely on the session ID.

Thanks to Sumit Bose <sbose@redhat.com> for the idea.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/ctdb_fork.c
ctdb/server/ctdb_daemon.c