vici: Fix dispatcher leak when handling unknown request
This commit is contained in:
@@ -220,26 +220,27 @@ void process_request(private_vici_dispatcher_t *this, char *name, u_int id,
|
|||||||
{
|
{
|
||||||
vici_message_t *response = NULL;
|
vici_message_t *response = NULL;
|
||||||
release_data_t *release;
|
release_data_t *release;
|
||||||
|
command_t *cmd;
|
||||||
INIT(release,
|
|
||||||
.this = this,
|
|
||||||
);
|
|
||||||
|
|
||||||
this->mutex->lock(this->mutex);
|
this->mutex->lock(this->mutex);
|
||||||
release->cmd = this->cmds->get(this->cmds, name);
|
cmd = this->cmds->get(this->cmds, name);
|
||||||
if (release->cmd)
|
if (cmd)
|
||||||
{
|
{
|
||||||
release->cmd->uses++;
|
cmd->uses++;
|
||||||
}
|
}
|
||||||
this->mutex->unlock(this->mutex);
|
this->mutex->unlock(this->mutex);
|
||||||
|
|
||||||
if (release->cmd)
|
if (cmd)
|
||||||
{
|
{
|
||||||
|
INIT(release,
|
||||||
|
.this = this,
|
||||||
|
.cmd = cmd,
|
||||||
|
);
|
||||||
|
|
||||||
thread_cleanup_push(release_command, release);
|
thread_cleanup_push(release_command, release);
|
||||||
|
|
||||||
release->request = vici_message_create_from_data(data, FALSE);
|
release->request = vici_message_create_from_data(data, FALSE);
|
||||||
response = release->cmd->cb(release->cmd->user, release->cmd->name,
|
response = release->cmd->cb(cmd->user, cmd->name, id, release->request);
|
||||||
id, release->request);
|
|
||||||
|
|
||||||
thread_cleanup_pop(TRUE);
|
thread_cleanup_pop(TRUE);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user