mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
Merge all returns paths from dispatcher into single path
The dispatcher functions have numerous places where they return to the caller. This leads to duplicated cleanup code, often resulting in memory leaks. It makes it harder to ensure that errors are dispatched before freeing objects, which may overwrite the original error. The standard pattern is now remoteDispatchXXX(...) { int rv = -1; .... if (XXX < 0) goto cleanup; ... if (XXXX < 0) goto cleanup; ... rv = 0; cleanup: if (rv < 0) remoteDispatchError(rerr); ...free all other stuff.. return rv; } * daemon/remote.c: Centralize all cleanup paths * daemon/stream.c: s/remoteDispatchConnError/remoteDispatchError/ * daemon/dispatch.c, daemon/dispatch.h: Replace remoteDispatchConnError with remoteDispatchError removing unused virConnectPtr
This commit is contained in:
parent
16d6b0d80a
commit
158ba8730e
@ -112,8 +112,7 @@ void remoteDispatchOOMError (remote_error *rerr)
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchConnError (remote_error *rerr,
|
||||
virConnectPtr conn ATTRIBUTE_UNUSED)
|
||||
void remoteDispatchError(remote_error *rerr)
|
||||
{
|
||||
virErrorPtr verr = virGetLastError();
|
||||
|
||||
|
@ -46,8 +46,7 @@ void remoteDispatchFormatError (remote_error *rerr,
|
||||
void remoteDispatchAuthError (remote_error *rerr);
|
||||
void remoteDispatchGenericError (remote_error *rerr);
|
||||
void remoteDispatchOOMError (remote_error *rerr);
|
||||
void remoteDispatchConnError (remote_error *rerr,
|
||||
virConnectPtr conn);
|
||||
void remoteDispatchError(remote_error *rerr);
|
||||
|
||||
|
||||
int
|
||||
|
4889
daemon/remote.c
4889
daemon/remote.c
File diff suppressed because it is too large
Load Diff
@ -403,7 +403,7 @@ remoteStreamHandleWriteData(struct qemud_client *client,
|
||||
} else {
|
||||
VIR_INFO0("Stream send failed");
|
||||
stream->closed = 1;
|
||||
remoteDispatchConnError(&rerr, client->conn);
|
||||
remoteDispatchError(&rerr);
|
||||
return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
}
|
||||
|
||||
@ -437,7 +437,7 @@ remoteStreamHandleFinish(struct qemud_client *client,
|
||||
ret = virStreamFinish(stream->st);
|
||||
|
||||
if (ret < 0) {
|
||||
remoteDispatchConnError(&rerr, client->conn);
|
||||
remoteDispatchError(&rerr);
|
||||
return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
} else {
|
||||
/* Send zero-length confirm */
|
||||
@ -569,7 +569,7 @@ remoteStreamHandleRead(struct qemud_client *client,
|
||||
} else if (ret < 0) {
|
||||
remote_error rerr;
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
remoteDispatchConnError(&rerr, NULL);
|
||||
remoteDispatchError(&rerr);
|
||||
|
||||
ret = remoteSerializeStreamError(client, &rerr, stream->procedure, stream->serial);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user