aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-29 09:36:38 +0200
committerEric Wong <normalperson@yhbt.net>2008-09-01 18:35:19 -0700
commit4ad71d6f79dfd8700441a5b3334e10ae5ab9f157 (patch)
treece5428bb8cdc1b4c34f8042d1e8c2929b53b066f
parent421fced5f9484a288fdc4f3ab33dfd4bfbfb7e84 (diff)
downloadmpd-4ad71d6f79dfd8700441a5b3334e10ae5ab9f157.tar.gz
mpd-4ad71d6f79dfd8700441a5b3334e10ae5ab9f157.tar.xz
mpd-4ad71d6f79dfd8700441a5b3334e10ae5ab9f157.zip
client: added global "expired" flag
Patch bdeb8e14 ("client: moved "expired" accesses into inline function") was created under the wrong assumption that processListOfCommands() could modify the expired flag, which is not the case. Although "expired" is a non-const pointer, processListOfCommands() just reads it, using it as the break condition in a "while" loop. I will address this issue with a better overall solution, but for now provide a pointer to a global "expired" flag.
-rw-r--r--src/client.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/client.c b/src/client.c
index 3a96e4caf..bce0acd5e 100644
--- a/src/client.c
+++ b/src/client.c
@@ -134,12 +134,16 @@ static inline int client_is_expired(const struct client *client)
return client->fd < 0;
}
+static int global_expired;
+
static inline void client_set_expired(struct client *client)
{
if (client->fd >= 0) {
xclose(client->fd);
client->fd = -1;
}
+
+ global_expired = 1;
}
static void client_init(struct client *client, int fd)
@@ -327,21 +331,18 @@ static int client_process_line(struct client *client)
if (client->cmd_list_OK >= 0) {
if (strcmp(line, CLIENT_LIST_MODE_END) == 0) {
- int expired;
-
DEBUG("client %i: process command "
"list\n", client->num);
+
+ global_expired = 0;
ret = processListOfCommands(client->fd,
&(client->permission),
- &(expired),
+ &global_expired,
client->cmd_list_OK,
client->cmd_list);
DEBUG("client %i: process command "
"list returned %i\n", client->num, ret);
- if (expired)
- client_set_expired(client);
-
if (ret == 0)
commandSuccess(client->fd);
else if (ret == COMMAND_RETURN_CLOSE