Commit 76ecc302 authored by Max Kellermann's avatar Max Kellermann

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.
parent 12bcba8b
...@@ -134,12 +134,16 @@ static inline int client_is_expired(const struct client *client) ...@@ -134,12 +134,16 @@ static inline int client_is_expired(const struct client *client)
return client->fd < 0; return client->fd < 0;
} }
static int global_expired;
static inline void client_set_expired(struct client *client) static inline void client_set_expired(struct client *client)
{ {
if (client->fd >= 0) { if (client->fd >= 0) {
xclose(client->fd); xclose(client->fd);
client->fd = -1; client->fd = -1;
} }
global_expired = 1;
} }
static void client_init(struct client *client, int fd) static void client_init(struct client *client, int fd)
...@@ -327,21 +331,18 @@ static int client_process_line(struct client *client) ...@@ -327,21 +331,18 @@ static int client_process_line(struct client *client)
if (client->cmd_list_OK >= 0) { if (client->cmd_list_OK >= 0) {
if (strcmp(line, CLIENT_LIST_MODE_END) == 0) { if (strcmp(line, CLIENT_LIST_MODE_END) == 0) {
int expired;
DEBUG("client %i: process command " DEBUG("client %i: process command "
"list\n", client->num); "list\n", client->num);
global_expired = 0;
ret = processListOfCommands(client->fd, ret = processListOfCommands(client->fd,
&(client->permission), &(client->permission),
&(expired), &global_expired,
client->cmd_list_OK, client->cmd_list_OK,
client->cmd_list); client->cmd_list);
DEBUG("client %i: process command " DEBUG("client %i: process command "
"list returned %i\n", client->num, ret); "list returned %i\n", client->num, ret);
if (expired)
client_set_expired(client);
if (ret == 0) if (ret == 0)
commandSuccess(client->fd); commandSuccess(client->fd);
else if (ret == COMMAND_RETURN_CLOSE else if (ret == COMMAND_RETURN_CLOSE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment