X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=door_daemon%2Fdoor_daemon.c;h=cf126688d12a2aa858afc785367ec7f48270de27;hb=bd2c78928d653160ef85e25e03e8b4e721635ac6;hp=6e4db12b865b22d1bc6894ea929ab0bbbd5a03e8;hpb=e939a260125c25cca64ebb8df1ad65214ec3b2d4;p=svn42.git diff --git a/door_daemon/door_daemon.c b/door_daemon/door_daemon.c index 6e4db12..cf12668 100644 --- a/door_daemon/door_daemon.c +++ b/door_daemon/door_daemon.c @@ -238,7 +238,12 @@ int main_loop(int door_fd, int cmd_listen_fd) int max_fd = door_fd > cmd_listen_fd ? door_fd : cmd_listen_fd; cmd_t* cmd_q = NULL; - signal_init(); + int sig_fd = signal_init(); + if(sig_fd < 0) + return -1; + FD_SET(sig_fd, &readfds); + max_fd = (max_fd < sig_fd) ? sig_fd : max_fd; + int return_value = 0; while(!return_value) { memcpy(&tmpfds, &readfds, sizeof(tmpfds)); @@ -249,13 +254,14 @@ int main_loop(int door_fd, int cmd_listen_fd) return_value = -1; break; } - if(!ret) + if(!ret || ret == -1) continue; - if(signal_exit) { + if(signal_handle()) { return_value = 1; break; } + FD_CLR(sig_fd, &tmpfds); if(FD_ISSET(door_fd, &tmpfds)) { return_value = process_door(door_fd, &cmd_q); @@ -298,6 +304,7 @@ int main_loop(int door_fd, int cmd_listen_fd) } cmd_clear(&cmd_q); + signal_stop(); return return_value; }