diff options
| author | Franklin Wei <git@fwei.tk> | 2016-01-17 21:09:54 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-01-17 21:09:54 -0500 |
| commit | e9d88b79ada4a5d544a36a28cc68a1254ca0a97b (patch) | |
| tree | 6f011073bccb7ddb9de02bb140316d5836adf0ea /src/client.c | |
| parent | 7c98d81dafd9b8bc8745d897603a424aee328c1c (diff) | |
| download | netcosm-e9d88b79ada4a5d544a36a28cc68a1254ca0a97b.zip netcosm-e9d88b79ada4a5d544a36a28cc68a1254ca0a97b.tar.gz netcosm-e9d88b79ada4a5d544a36a28cc68a1254ca0a97b.tar.bz2 netcosm-e9d88b79ada4a5d544a36a28cc68a1254ca0a97b.tar.xz | |
better synchronization, less weird behavior
Diffstat (limited to 'src/client.c')
| -rw-r--r-- | src/client.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/client.c b/src/client.c index 41c9495..464fca8 100644 --- a/src/client.c +++ b/src/client.c @@ -36,7 +36,7 @@ static volatile sig_atomic_t output_locked = 0; char *current_user = NULL; -void poll_requests(void); +bool poll_requests(void); void out_raw(const void *buf, size_t len) { @@ -157,7 +157,7 @@ void send_master(unsigned char cmd, const void *data, size_t sz) poll(&pfd, 1, -1); - poll_requests(); + while(poll_requests()); free(req); } @@ -246,12 +246,12 @@ void read_string_max(int fd, char *buf, size_t max) buf[max - 1] = '\0'; } -void poll_requests(void) +bool poll_requests(void) { if(!are_child) - return; + return false; - reqdata_type = TYPE_NONE; + bool got_cmd = false; while(1) { @@ -267,6 +267,8 @@ void poll_requests(void) if(packetlen <= 0) goto fail; + got_cmd = true; + unsigned char cmd = packet[0]; switch(cmd) @@ -316,11 +318,14 @@ void poll_requests(void) } case REQ_NOP: break; - case REQ_PRINT_NL: + case REQ_PRINTNEWLINE: { out("\n"); break; } + case REQ_ALLDONE: + request_complete = 1; + break; default: sig_debugf("WARNING: client process received unknown code %d\n", cmd); break; @@ -328,7 +333,7 @@ void poll_requests(void) } fail: - request_complete = 1; + return got_cmd; } void client_change_state(int state) |