summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_call.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2012-05-03 11:42:41 +1000
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2012-05-03 14:03:26 +1000
commita57eba2bb49b32f3dc69542de69b8b74ec9d3d09 (patch)
tree020fe37817cc3736da55a60b7e9912de23a91b9b /ctdb/server/ctdb_call.c
parent85432ecc5383fe4aa0fc1af9d816b17cc0629f1e (diff)
downloadsamba-a57eba2bb49b32f3dc69542de69b8b74ec9d3d09.tar.gz
samba-a57eba2bb49b32f3dc69542de69b8b74ec9d3d09.tar.xz
samba-a57eba2bb49b32f3dc69542de69b8b74ec9d3d09.zip
Track all child process so we never send a signal to an unrelated process (our child died and kernel wrapped the pid-space and reused the pid for a different process
Wrap all creation of child processes inside ctdb_fork() which is used to track all processes we have spawned. Capture SIGCHLD to track also which child processes have terminated. Wrap kill() inside ctdb_kill() and make sure that we never send a !0 signal to a child process pid that has already terminated (and might have been replaced with a (This used to be ctdb commit f73a4b1495830bcdd094a93732a89dd53b3c2f78)
Diffstat (limited to 'ctdb/server/ctdb_call.c')
-rw-r--r--ctdb/server/ctdb_call.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ctdb/server/ctdb_call.c b/ctdb/server/ctdb_call.c
index 08b701c4fc9..fe7e947c036 100644
--- a/ctdb/server/ctdb_call.c
+++ b/ctdb/server/ctdb_call.c
@@ -1388,7 +1388,7 @@ static int revokechild_destructor(struct revokechild_handle *rc)
if (rc->fd[1] != -1) {
close(rc->fd[1]);
}
- kill(rc->child, SIGKILL);
+ ctdb_kill(rc->ctdb, rc->child, SIGKILL);
DLIST_REMOVE(rc->ctdb_db->revokechild_active, rc);
return 0;
@@ -1617,7 +1617,7 @@ int ctdb_start_revoke_ro_record(struct ctdb_context *ctdb, struct ctdb_db_contex
child_finished:
write(rc->fd[1], &c, 1);
/* make sure we die when our parent dies */
- while (kill(parent, 0) == 0 || errno != ESRCH) {
+ while (ctdb_kill(ctdb, parent, 0) == 0 || errno != ESRCH) {
sleep(5);
}
_exit(0);