diff options
author | Max Kellermann <max@duempel.org> | 2008-08-29 09:36:40 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-29 09:36:40 +0200 |
commit | e743d71b89c0799d7e7401b1b777236641afb236 (patch) | |
tree | 1cecdb613067178710970ae20b3fbcd35ee4eda5 /src/client.c | |
parent | 76ecc3024371e6272493e77a311e0cb079a49216 (diff) | |
download | mpd-e743d71b89c0799d7e7401b1b777236641afb236.tar.gz mpd-e743d71b89c0799d7e7401b1b777236641afb236.tar.xz mpd-e743d71b89c0799d7e7401b1b777236641afb236.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.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/client.c b/src/client.c index b4aea2085..c0cca399e 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); } } |