vici: Fix dispatcher leak when handling unknown request

This commit is contained in:
Martin Willi
2014-05-07 14:13:36 +02:00
parent e2496bda02
commit 9bfa397eba
+11 -10
View File
@@ -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);