X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Futil%2Fserver_child.c;h=016029f8c4200a34e87896f0eba8460326e02f89;hb=5a338fdcf3a5f33c7bebba55373172cf0bf2e00e;hp=ecefbd2cb7502c65ff349e68b3b845f65e88d91b;hpb=3858412d6efa2798fdc9b3f5613275e49dd63513;p=netatalk.git diff --git a/libatalk/util/server_child.c b/libatalk/util/server_child.c index ecefbd2c..016029f8 100644 --- a/libatalk/util/server_child.c +++ b/libatalk/util/server_child.c @@ -135,8 +135,10 @@ afp_child_t *server_child_add(server_child *children, int forkid, pid_t pid, uin /* it's possible that the child could have already died before the * pthread_sigmask. we need to check for this. */ - if (kill(pid, 0) < 0) + if (kill(pid, 0) < 0) { + LOG(log_error, logtype_default, "server_child_add: no such process pid [%d]", pid); goto exit; + } fork = (server_child_fork *) children->fork + forkid; @@ -279,6 +281,16 @@ int server_child_transfer_session(server_child *children, fork = (server_child_fork *) children->fork + forkid; if ((child = resolve_child(fork->table, pid)) == NULL) { LOG(log_note, logtype_default, "Reconnect: no child[%u]", pid); + if (kill(pid, 0) == 0) { + LOG(log_note, logtype_default, "Reconnect: terminating old session[%u]", pid); + kill(pid, SIGTERM); + sleep(2); + if (kill(pid, 0) == 0) { + LOG(log_error, logtype_default, "Reconnect: killing old session[%u]", pid); + kill(pid, SIGKILL); + sleep(2); + } + } return 0; }