projects
/
svn42.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added shell script to update web status
[svn42.git]
/
door_daemon
/
door_daemon.c
diff --git
a/door_daemon/door_daemon.c
b/door_daemon/door_daemon.c
index
01bd6f3
..
e9c02a1
100644
(file)
--- 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) {
} while(!ret || (ret == -1 && errno == EINTR));
if(ret > 0) {
- cmd->sent = 1;
+ cmd_sent(cmd);
return 0;
}
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;
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)
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;
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 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 == -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;
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()) {
if(FD_ISSET(sig_fd, &tmpfds)) {
if(signal_handle()) {