X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Futil%2Fserver_child.c;h=34cec28d17d5b0d601a5fef0daacf0c8b3bbbe90;hb=b0bcb8f6b0571592a50ce039882c9319e012a270;hp=63f3683a54090e6caa27b5919bd5082e580188e0;hpb=327257d3290c7a2723791c9b755a5b05a6b7ce74;p=netatalk.git diff --git a/libatalk/util/server_child.c b/libatalk/util/server_child.c index 63f3683a..34cec28d 100644 --- a/libatalk/util/server_child.c +++ b/libatalk/util/server_child.c @@ -18,17 +18,11 @@ #include #include -#ifdef HAVE_UNISTD_H #include -#endif /* HAVE_UNISTD_H */ #include #include - -/* POSIX.1 sys/wait.h check */ #include -#ifdef HAVE_SYS_WAIT_H #include -#endif /* HAVE_SYS_WAIT_H */ #include #include @@ -279,6 +273,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; } @@ -337,9 +341,9 @@ void server_child_kill_one_by_id(server_child *children, int forkid, pid_t pid, "Session with different pid[%u]", child->pid); } } else { - kill_child(child); - LOG(log_note, logtype_default, - "Terminated disconnected session[%u]", child->pid); + /* One client with multiple sessions */ + LOG(log_debug, logtype_default, + "Found another session[%u] for client[%u]", child->pid, pid); } } } else { @@ -347,7 +351,7 @@ void server_child_kill_one_by_id(server_child *children, int forkid, pid_t pid, child->time = boottime; if (child->clientid) free(child->clientid); - LOG(log_debug, logtype_default, "Setting client ID for %d", child->pid); + LOG(log_debug, logtype_default, "Setting client ID for %u", child->pid); child->uid = uid; child->valid = 1; child->idlen = idlen;