aboutsummaryrefslogtreecommitdiffstats
path: root/src/client.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-29 09:36:40 +0200
committerEric Wong <normalperson@yhbt.net>2008-09-01 18:35:19 -0700
commit69af10a006bf9e67f4689642e06bae24f67e873d (patch)
tree128e1d1951a2bb61661a6d6db7226f6502fdbd2c /src/client.c
parent4ad71d6f79dfd8700441a5b3334e10ae5ab9f157 (diff)
downloadmpd-69af10a006bf9e67f4689642e06bae24f67e873d.tar.gz
mpd-69af10a006bf9e67f4689642e06bae24f67e873d.tar.xz
mpd-69af10a006bf9e67f4689642e06bae24f67e873d.zip
client: check "expired" after command execution
The old code tried to write a response to the client, without even checking if it was already closed. Now that we have added more assertions, these may fail... perform the "expired" check earlier.
Diffstat (limited to 'src/client.c')
-rw-r--r--src/client.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/client.c b/src/client.c
index bce0acd5e..6a43b9586 100644
--- a/src/client.c
+++ b/src/client.c
@@ -343,11 +343,14 @@ static int client_process_line(struct client *client)
DEBUG("client %i: process command "
"list returned %i\n", client->num, ret);
+ if (ret == COMMAND_RETURN_CLOSE ||
+ client_is_expired(client)) {
+ client_close(client);
+ return COMMAND_RETURN_CLOSE;
+ }
+
if (ret == 0)
commandSuccess(client->fd);
- else if (ret == COMMAND_RETURN_CLOSE
- || client_is_expired(client))
- client_close(client);
client_write_output(client);
free_cmd_list(client->cmd_list);
@@ -385,12 +388,16 @@ static int client_process_line(struct client *client)
&(client->permission), line);
DEBUG("client %i: command returned %i\n",
client->num, ret);
- if (ret == 0)
- commandSuccess(client->fd);
- else if (ret == COMMAND_RETURN_CLOSE
- || client_is_expired(client)) {
+
+ if (ret == COMMAND_RETURN_CLOSE ||
+ client_is_expired(client)) {
client_close(client);
+ return COMMAND_RETURN_CLOSE;
}
+
+ if (ret == 0)
+ commandSuccess(client->fd);
+
client_write_output(client);
}
}