Skip to content

Commit 57e20f4

Browse files
dmansfieldmbroadst
authored andcommitted
fix(error): keep copy of error object for later references
1 parent 526d924 commit 57e20f4

14 files changed

+199
-173
lines changed

src/domain.cc

Lines changed: 77 additions & 76 deletions
Large diffs are not rendered by default.

src/error.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ Error::Error(virErrorPtr error)
153153
error_ = error;
154154
}
155155

156+
Error::~Error()
157+
{
158+
virFreeError(error_);
159+
}
160+
156161
Local<Value> Error::New(virErrorPtr error)
157162
{
158163
Nan::EscapableHandleScope scope;

src/error.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Error : public Nan::ObjectWrap
1414

1515
private:
1616
explicit Error(virErrorPtr error);
17+
~Error();
1718
static Nan::Persistent<Function> constructor;
1819

1920
static NAN_GETTER(Getter);

src/hypervisor.cc

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ NLV_WORKER_EXECUTE(Hypervisor, Connect)
286286
virConnectOpenAuth((const char*) hypervisor_->uri_.c_str(), &auth,
287287
hypervisor_->readOnly_ ? VIR_CONNECT_RO : 0);
288288
if (hypervisor_->handle_ == NULL)
289-
SetVirError(virGetLastError());
289+
SetVirError(virSaveLastError());
290290
}
291291

292292
NAN_METHOD(Hypervisor::Disconnect)
@@ -310,7 +310,7 @@ NLV_WORKER_EXECUTE(Hypervisor, Disconnect)
310310
hypervisor_->ClearHandle();
311311
// int result = virConnectClose(Handle());
312312
// if (result == -1) {
313-
// SetVirError(virGetLastError());
313+
// SetVirError(virSaveLastError());
314314
// return;
315315
// }
316316

@@ -323,7 +323,7 @@ NLV_WORKER_EXECUTE(Hypervisor, Disconnect)
323323
NLV_WORKER_ASSERT_CONNECTION(); \
324324
char *result = Accessor(Handle()); \
325325
if (result == NULL) { \
326-
SetVirError(virGetLastError()); \
326+
SetVirError(virSaveLastError()); \
327327
return; \
328328
} \
329329
data_ = result; \
@@ -335,7 +335,7 @@ NLV_WORKER_EXECUTE(Hypervisor, Disconnect)
335335
NLV_WORKER_ASSERT_CONNECTION(); \
336336
const char *result = Accessor(Handle()); \
337337
if (result == NULL) { \
338-
SetVirError(virGetLastError()); \
338+
SetVirError(virSaveLastError()); \
339339
return; \
340340
} \
341341
data_ = result; \
@@ -354,7 +354,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetSysInfo)
354354
NLV_WORKER_ASSERT_CONNECTION();
355355
char *result = virConnectGetSysinfo(Handle(), 0);
356356
if (result == NULL) {
357-
SetVirError(virGetLastError());
357+
SetVirError(virSaveLastError());
358358
return;
359359
}
360360

@@ -376,7 +376,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetVersion)
376376
unsigned long version;
377377
int result = virConnectGetVersion(Handle(), &version);
378378
if (result == -1) {
379-
SetVirError(virGetLastError());
379+
SetVirError(virSaveLastError());
380380
return;
381381
} else if (result == 0 && version == 0) {
382382
return;
@@ -400,7 +400,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetLibVirtVersion)
400400
unsigned long version;
401401
int result = virConnectGetLibVersion(Handle(), &version);
402402
if (result == -1) {
403-
SetVirError(virGetLastError());
403+
SetVirError(virSaveLastError());
404404
return;
405405
}
406406

@@ -418,7 +418,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetLibVirtVersion)
418418
NLV_WORKER_ASSERT_CONNECTION(); \
419419
int result = Accessor(Handle()); \
420420
if (result == -1) { \
421-
SetVirError(virGetLastError()); \
421+
SetVirError(virSaveLastError()); \
422422
return; \
423423
} \
424424
data_ = result; \
@@ -464,7 +464,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetMaxVcpus)
464464
NLV_WORKER_ASSERT_CONNECTION();
465465
int result = virConnectGetMaxVcpus(Handle(), type_.c_str());
466466
if (result == -1) {
467-
SetVirError(virGetLastError());
467+
SetVirError(virSaveLastError());
468468
return;
469469
}
470470

@@ -510,7 +510,7 @@ NLV_WORKER_EXECUTE(Hypervisor, SetKeepAlive)
510510

511511
int result = virConnectSetKeepAlive(Handle(), interval_, count_);
512512
if (result == -1) {
513-
SetVirError(virGetLastError());
513+
SetVirError(virSaveLastError());
514514
return;
515515
}
516516

@@ -554,7 +554,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetBaselineCPU)
554554
delete [] cpus_;
555555

556556
if (result == NULL) {
557-
SetVirError(virGetLastError());
557+
SetVirError(virSaveLastError());
558558
return;
559559
}
560560

@@ -584,7 +584,7 @@ NLV_WORKER_EXECUTE(Hypervisor, CompareCPU)
584584
NLV_WORKER_ASSERT_CONNECTION();
585585
int result = virConnectCompareCPU(Handle(), (const char *)cpu_.c_str(), flags_);
586586
if (result == VIR_CPU_COMPARE_ERROR) {
587-
SetVirError(virGetLastError());
587+
SetVirError(virSaveLastError());
588588
return;
589589
}
590590

@@ -596,7 +596,7 @@ NLV_WORKER_EXECUTE(Hypervisor, CompareCPU)
596596
NLV_WORKER_ASSERT_CONNECTION() \
597597
int count = CountMethod(Handle()); \
598598
if (count == -1) { \
599-
SetVirError(virGetLastError()); \
599+
SetVirError(virSaveLastError()); \
600600
return; \
601601
} \
602602
char **names = new char*[count]; \
@@ -606,7 +606,7 @@ NLV_WORKER_EXECUTE(Hypervisor, CompareCPU)
606606
} \
607607
int nameCount = ListMethod(Handle(), names, count); \
608608
if (nameCount == -1) { \
609-
SetVirError(virGetLastError()); \
609+
SetVirError(virSaveLastError()); \
610610
delete [] names; \
611611
return; \
612612
} \
@@ -622,7 +622,7 @@ NLV_WORKER_EXECUTE(Hypervisor, CompareCPU)
622622
NLV_WORKER_ASSERT_CONNECTION() \
623623
int count = CountMethod(Handle()); \
624624
if (count == -1) { \
625-
SetVirError(virGetLastError()); \
625+
SetVirError(virSaveLastError()); \
626626
return; \
627627
} \
628628
int *elements = new int[count]; \
@@ -633,7 +633,7 @@ NLV_WORKER_EXECUTE(Hypervisor, CompareCPU)
633633
} \
634634
int elementCount = ListMethod(Handle(), elements, count); \
635635
if (elementCount == -1) { \
636-
SetVirError(virGetLastError()); \
636+
SetVirError(virSaveLastError()); \
637637
return; \
638638
} \
639639
for (int i = 0; i < elementCount; ++i) { \
@@ -744,7 +744,7 @@ NLV_WORKER_EXECUTE(Hypervisor, ListNodeDevices)
744744
virNodeNumOfDevices(Handle(), (const char *) capability_.c_str(), flags);
745745

746746
if (num_devices == -1) {
747-
SetVirError(virGetLastError());
747+
SetVirError(virSaveLastError());
748748
return;
749749
}
750750

@@ -758,7 +758,7 @@ NLV_WORKER_EXECUTE(Hypervisor, ListNodeDevices)
758758
virNodeListDevices(Handle(), (const char *)capability_.c_str(), names, num_devices, flags);
759759
if (num_devices == -1) {
760760
free(names);
761-
SetVirError(virGetLastError());
761+
SetVirError(virSaveLastError());
762762
return;
763763
}
764764

@@ -776,7 +776,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetNodeSecurityModel)
776776
NLV_WORKER_ASSERT_CONNECTION();
777777
int result = virNodeGetSecurityModel(Handle(), &securityModel_);
778778
if (result == -1) {
779-
SetVirError(virGetLastError());
779+
SetVirError(virSaveLastError());
780780
return;
781781
}
782782
}
@@ -803,7 +803,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetNodeInfo)
803803
NLV_WORKER_ASSERT_CONNECTION();
804804
int result = virNodeGetInfo(Handle(), &info_);
805805
if (result == -1) {
806-
SetVirError(virGetLastError());
806+
SetVirError(virSaveLastError());
807807
return;
808808
}
809809
}
@@ -832,7 +832,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetNodeFreeMemory)
832832
NLV_WORKER_ASSERT_CONNECTION();
833833
unsigned long long result = virNodeGetFreeMemory(Handle());
834834
if (result == 0) {
835-
SetVirError(virGetLastError());
835+
SetVirError(virSaveLastError());
836836
return;
837837
}
838838

@@ -865,7 +865,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetNodeMemoryStats)
865865
result = virNodeGetMemoryStats(Handle(), cellNum_, &info_[0], &nparams, flags_);
866866
}
867867
if (result == -1) {
868-
SetVirError(virGetLastError());
868+
SetVirError(virSaveLastError());
869869
return;
870870
}
871871
}
@@ -918,7 +918,7 @@ NLV_WORKER_EXECUTE(Hypervisor, GetNodeCellsFreeMemory)
918918
virNodeGetCellsFreeMemory(Handle(), results, startCell_, maxCells_);
919919
if (cells == -1) {
920920
free(results);
921-
SetVirError(virGetLastError());
921+
SetVirError(virSaveLastError());
922922
return;
923923
}
924924

src/interface.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ NLV_WORKER_EXECUTE(Interface, Start)
4848
unsigned int flags = 0;
4949
int result = virInterfaceCreate(Handle(), flags);
5050
if (result == -1) {
51-
SetVirError(virGetLastError());
51+
SetVirError(virSaveLastError());
5252
return;
5353
}
5454

@@ -63,7 +63,7 @@ NLV_WORKER_EXECUTE(Interface, Stop)
6363
unsigned int flags = 0;
6464
int result = virInterfaceDestroy(Handle(), flags);
6565
if (result == -1) {
66-
SetVirError(virGetLastError());
66+
SetVirError(virSaveLastError());
6767
return;
6868
}
6969

@@ -76,7 +76,7 @@ NLV_WORKER_EXECUTE(Interface, Define)
7676
unsigned int flags = 0;
7777
lookupHandle_ = virInterfaceDefineXML(parent_->handle_, value_.c_str(), flags);
7878
if (lookupHandle_ == NULL) {
79-
SetVirError(virGetLastError());
79+
SetVirError(virSaveLastError());
8080
return;
8181
}
8282
}
@@ -87,7 +87,7 @@ NLV_WORKER_EXECUTE(Interface, Undefine)
8787
NLV_WORKER_ASSERT_INTERFACE();
8888
int result = virInterfaceUndefine(Handle());
8989
if (result == -1) {
90-
SetVirError(virGetLastError());
90+
SetVirError(virSaveLastError());
9191
return;
9292
}
9393

@@ -146,7 +146,7 @@ NLV_WORKER_EXECUTE(Interface, GetName)
146146
NLV_WORKER_ASSERT_INTERFACE();
147147
const char *result = virInterfaceGetName(Handle());
148148
if (result == NULL) {
149-
SetVirError(virGetLastError());
149+
SetVirError(virSaveLastError());
150150
return;
151151
}
152152

@@ -159,7 +159,7 @@ NLV_WORKER_EXECUTE(Interface, GetMacAddress)
159159
NLV_WORKER_ASSERT_INTERFACE();
160160
const char *result = virInterfaceGetMACString(Handle());
161161
if (result == NULL) {
162-
SetVirError(virGetLastError());
162+
SetVirError(virSaveLastError());
163163
return;
164164
}
165165

@@ -172,7 +172,7 @@ NLV_WORKER_EXECUTE(Interface, IsActive)
172172
NLV_WORKER_ASSERT_INTERFACE();
173173
int result = virInterfaceIsActive(Handle());
174174
if (result == -1) {
175-
SetVirError(virGetLastError());
175+
SetVirError(virSaveLastError());
176176
return;
177177
}
178178

@@ -186,7 +186,7 @@ NLV_WORKER_EXECUTE(Interface, ToXml)
186186
unsigned int flags = 0;
187187
char *result = virInterfaceGetXMLDesc(Handle(), flags);
188188
if (result == NULL) {
189-
SetVirError(virGetLastError());
189+
SetVirError(virSaveLastError());
190190
return;
191191
}
192192

0 commit comments

Comments
 (0)