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.
This commit is contained in:
parent
12bcba8b89
commit
76ecc30243
13
src/client.c
13
src/client.c
@ -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)
|
|||||||
|
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user