int ret;
virNetMessagePtr msg;
virNetMessageError rerr;
- virErrorPtr origErr = virSaveLastError();
+ virErrorPtr origErr;
+
+ virErrorPreserveLast(&origErr);
memset(&rerr, 0, sizeof(rerr));
stream->closed = true;
virStreamEventRemoveCallback(stream->st);
virStreamAbort(stream->st);
if (origErr && origErr->code != VIR_ERR_OK) {
- virSetError(origErr);
+ virErrorRestore(&origErr);
} else {
+ virFreeError(origErr);
if (events & VIR_STREAM_EVENT_HANGUP)
virReportError(VIR_ERR_RPC,
"%s", _("stream had unexpected termination"));
virReportError(VIR_ERR_RPC,
"%s", _("stream had I/O failure"));
}
- virFreeError(origErr);
msg = virNetMessageNew(false);
if (!msg) {
return 1;
} else if (ret < 0) {
virNetMessageError rerr;
- virErrorPtr err = virSaveLastError();
+ virErrorPtr err;
+
+ virErrorPreserveLast(&err);
memset(&rerr, 0, sizeof(rerr));
virStreamEventRemoveCallback(stream->st);
virStreamAbort(stream->st);
- if (err) {
- virSetError(err);
- virFreeError(err);
- }
+ virErrorRestore(&err);
return virNetServerProgramSendReplyError(stream->prog,
client,