*
*/
+#include <signal.h>
+#include <sys/types.h>
+#include <dirent.h>
#include "para.h"
#include "server.cmdline.h"
uint32_t afs_socket_cookie;
static int afs_socket;
-pid_t afs_pid;
+static pid_t afs_pid;
static void init_afs(void)
{
afs_pid = fork();
if (afs_pid < 0)
exit(EXIT_FAILURE);
- if (!afs_pid) /* child (afs) */
+ if (!afs_pid) { /* child (afs) */
+ close(afs_server_socket[0]);
afs_init(afs_socket_cookie, afs_server_socket[1]);
+ }
close(afs_server_socket[1]);
afs_socket = afs_server_socket[0];
+ ret = mark_fd_nonblock(afs_socket);
+ if (ret < 0)
+ exit(EXIT_FAILURE);
+ add_close_on_fork_list(afs_socket);
PARA_INFO_LOG("afs_socket: %d, afs_socket_cookie: %u\n", afs_socket,
(unsigned) afs_socket_cookie);
}
mmd->selector_change = mmd->selector_num; /* do not change selector.. */
change_selector(); /* .. just reload */
init_user_list(user_list_file); /* reload user list */
+ if (afs_pid)
+ kill(afs_pid, SIGHUP);
}
static void status_refresh(void)
break;
case SIGCHLD:
for (;;) {
- pid = para_reap_child();
- if (pid <= 0)
+ ret = para_reap_child(&pid);
+ if (ret <= 0)
break;
if (pid != afs_pid)
continue;