rpc: Plug memory leak on virNetClientSendInternal() error path

Detected by Coverity. Leak introduced in commit 673adba.

Two separate bugs here:
1. call was not freed on all error paths
2. virCondDestroy was called even if virCondInit failed

Signed-off-by: Alex Jia <ajia@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Alex Jia 2011-11-30 13:57:09 +08:00 committed by Eric Blake
parent ad8fa356a6
commit 773a4ea5e1

View File

@ -1708,7 +1708,7 @@ static int virNetClientSendInternal(virNetClientPtr client,
if (!client->sock || client->wantClose) {
virNetError(VIR_ERR_INTERNAL_ERROR, "%s",
_("client socket is closed"));
goto unlock;
goto cleanup;
}
if (virCondInit(&call->cond) < 0) {
@ -1729,16 +1729,16 @@ static int virNetClientSendInternal(virNetClientPtr client,
ret = virNetClientIO(client, call);
cleanup:
/* If partially sent, then the call is still on the dispatch queue */
if (ret == 1) {
call->haveThread = false;
} else {
ignore_value(virCondDestroy(&call->cond));
VIR_FREE(call);
}
unlock:
cleanup:
if (ret != 1)
VIR_FREE(call);
virNetClientUnlock(client);
return ret;
}