#include <stdlib.h>
#include <string.h>
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
#include <signal.h>
#include <errno.h>
-
-/* POSIX.1 sys/wait.h check */
#include <sys/types.h>
-#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
-#endif /* HAVE_SYS_WAIT_H */
#include <sys/time.h>
#include <atalk/logger.h>
void (*cleanup)(const pid_t);
} server_child_fork;
-int parent_or_child; /* 0: parent, 1: child */
-
static inline void hash_child(struct server_child_data **htable,
struct server_child_data *child)
{
/* 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;
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;