X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=door_daemon%2Fdoor_daemon.c;h=e9c02a18e1eb530693c309d1e14297c81d3d9563;hb=607de0502e7028837b76b85e127d83bcb52d6b4e;hp=01bd6f3c15137e5818b9e1dcb3881c93f256fc1b;hpb=9903e31e3908087384637a11d3a297b878b4ba65;p=svn42.git diff --git a/door_daemon/door_daemon.c b/door_daemon/door_daemon.c index 01bd6f3..e9c02a1 100644 --- a/door_daemon/door_daemon.c +++ b/door_daemon/door_daemon.c @@ -95,7 +95,7 @@ int send_command(int door_fd, cmd_t* cmd) } while(!ret || (ret == -1 && errno == EINTR)); if(ret > 0) { - cmd->sent = 1; + cmd_sent(cmd); return 0; } @@ -241,6 +241,8 @@ int process_door(read_buffer_t* buffer, int door_fd, cmd_t **cmd_q, client_t* cl ret = select(door_fd+1, &fds, NULL, NULL, &tv); if(!ret) return 0; + else if(ret < 0) + return ret; ret = read(door_fd, &buffer->buf[buffer->offset], 1); if(!ret) @@ -305,18 +307,29 @@ int main_loop(int door_fd, int cmd_listen_fd) FD_SET(sig_fd, &readfds); max_fd = (max_fd < sig_fd) ? sig_fd : max_fd; + struct timeval timeout; int return_value = 0; while(!return_value) { memcpy(&tmpfds, &readfds, sizeof(tmpfds)); - int ret = select(max_fd+1, &tmpfds, NULL, NULL, NULL); + timeout.tv_sec = 0; + timeout.tv_usec = 200000; + int ret = select(max_fd+1, &tmpfds, NULL, NULL, &timeout); if(ret == -1 && errno != EINTR) { log_printf(ERROR, "select returned with error: %s", strerror(errno)); return_value = -1; break; } - if(!ret || ret == -1) + if(ret == -1) continue; + if(!ret) { + if(cmd_q && cmd_has_expired(*cmd_q)) { + log_printf(ERROR, "last command expired"); + cmd_pop(&cmd_q); + } + else + continue; + } if(FD_ISSET(sig_fd, &tmpfds)) { if(signal_handle()) {