aboutsummaryrefslogtreecommitdiff
path: root/src/client.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-01-17 21:09:54 -0500
committerFranklin Wei <git@fwei.tk>2016-01-17 21:09:54 -0500
commite9d88b79ada4a5d544a36a28cc68a1254ca0a97b (patch)
tree6f011073bccb7ddb9de02bb140316d5836adf0ea /src/client.c
parent7c98d81dafd9b8bc8745d897603a424aee328c1c (diff)
downloadnetcosm-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.c19
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)