continue;
fdset_del_fd(&fdset, &polldata, &fdset_used, &fdset_size, config->fd);
}
- fd_set_listening_sockets();
}
/* ------------------ */
static void afp_goaway(int sig)
{
+ AFPConfig *config;
#ifndef NO_DDP
asp_kill(sig);
#endif /* ! NO_DDP */
- if (server_children)
- server_child_kill(server_children, CHILD_DSIFORK, sig);
-
switch( sig ) {
case SIGTERM :
LOG(log_note, logtype_afpd, "AFP Server shutting down on SIGTERM");
- AFPConfig *config;
+
+ if (server_children)
+ server_child_kill(server_children, CHILD_DSIFORK, sig);
+
+ for (config = configs; config; config = config->next)
+ if (config->server_cleanup)
+ config->server_cleanup(config);
+ server_unlock(default_options.pidfile);
+ exit(0);
+ break;
+
+ case SIGQUIT:
+ LOG(log_note, logtype_afpd, "AFP Server shutting down on SIGQUIT, NOT disconnecting clients");
+
for (config = configs; config; config = config->next)
if (config->server_cleanup)
config->server_cleanup(config);
+
server_unlock(default_options.pidfile);
exit(0);
break;
nologin++;
auth_unload();
LOG(log_info, logtype_afpd, "disallowing logins");
+
+ if (server_children)
+ server_child_kill(server_children, CHILD_DSIFORK, sig);
break;
case SIGHUP :
}
memset(&sv, 0, sizeof(sv));
-#ifdef AFP3x
/* linux at least up to 2.4.22 send a SIGXFZ for vfat fs,
even if the file is open with O_LARGEFILE ! */
#ifdef SIGXFSZ
LOG(log_error, logtype_afpd, "main: sigaction: %s", strerror(errno) );
exit(EXITERR_SYS);
}
-#endif
#endif
sv.sa_handler = child_handler;
if (reloadconfig) {
nologin++;
auth_unload();
+ fd_reset_listening_sockets();
LOG(log_info, logtype_afpd, "re-reading configuration file");
for (config = configs; config; config = config->next)
LOG(log_error, logtype_afpd, "config re-read: no servers configured");
exit(EXITERR_CONF);
}
- fd_reset_listening_sockets();
+
+ fd_set_listening_sockets();
+
nologin = 0;
reloadconfig = 0;
errno = saveerrno;
+ continue;
}
if (ret == 0)