[libvirt] [go PATCH 34/37] events: fix error reporting thread safety

Daniel P. Berrangé berrange at redhat.com
Mon Jul 16 13:24:20 UTC 2018


Create wrapper functions for each events C API that accepts a
virErrorPtr parameter. This avoids accessing a thread local from a
goroutine which may race with other goroutines doing native API calls in
the same OS thread.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 domain_events.go               | 131 ++++++++++++++++++++-------------
 domain_events_wrapper.go       |  33 +++++++--
 domain_events_wrapper.h        |   7 +-
 events.go                      |  40 +++++++---
 events_wrapper.go              |  83 ++++++++++++++++++---
 events_wrapper.h               |  35 ++++++---
 network_events.go              |  11 ++-
 network_events_wrapper.go      |  26 +++++--
 network_events_wrapper.h       |  13 +---
 node_device_events.go          |  16 ++--
 node_device_events_wrapper.go  |  31 ++++++--
 node_device_events_wrapper.h   |   6 +-
 secret_events.go               |  16 ++--
 secret_events_wrapper.go       |  27 +++++--
 secret_events_wrapper.h        |   6 +-
 storage_pool_events.go         |  16 ++--
 storage_pool_events_wrapper.go |  31 ++++++--
 storage_pool_events_wrapper.h  |   6 +-
 18 files changed, 382 insertions(+), 152 deletions(-)

diff --git a/domain_events.go b/domain_events.go
index 68dc301..fe46c5e 100644
--- a/domain_events.go
+++ b/domain_events.go
@@ -966,13 +966,14 @@ func (c *Connect) DomainEventLifecycleRegister(dom *Domain, callback DomainEvent
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_LIFECYCLE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -985,13 +986,14 @@ func (c *Connect) DomainEventRebootRegister(dom *Domain, callback DomainEventGen
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_REBOOT,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1004,13 +1006,14 @@ func (c *Connect) DomainEventRTCChangeRegister(dom *Domain, callback DomainEvent
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1023,13 +1026,14 @@ func (c *Connect) DomainEventWatchdogRegister(dom *Domain, callback DomainEventW
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_WATCHDOG,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1042,13 +1046,14 @@ func (c *Connect) DomainEventIOErrorRegister(dom *Domain, callback DomainEventIO
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_IO_ERROR,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1061,13 +1066,14 @@ func (c *Connect) DomainEventGraphicsRegister(dom *Domain, callback DomainEventG
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_GRAPHICS,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1080,13 +1086,14 @@ func (c *Connect) DomainEventIOErrorReasonRegister(dom *Domain, callback DomainE
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1099,13 +1106,14 @@ func (c *Connect) DomainEventControlErrorRegister(dom *Domain, callback DomainEv
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1118,13 +1126,14 @@ func (c *Connect) DomainEventBlockJobRegister(dom *Domain, callback DomainEventB
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_BLOCK_JOB,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1137,13 +1146,14 @@ func (c *Connect) DomainEventDiskChangeRegister(dom *Domain, callback DomainEven
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1156,13 +1166,14 @@ func (c *Connect) DomainEventTrayChangeRegister(dom *Domain, callback DomainEven
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_TRAY_CHANGE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1175,13 +1186,14 @@ func (c *Connect) DomainEventPMWakeupRegister(dom *Domain, callback DomainEventP
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_PMWAKEUP,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1194,13 +1206,14 @@ func (c *Connect) DomainEventPMSuspendRegister(dom *Domain, callback DomainEvent
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_PMSUSPEND,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1213,13 +1226,14 @@ func (c *Connect) DomainEventBalloonChangeRegister(dom *Domain, callback DomainE
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1232,13 +1246,14 @@ func (c *Connect) DomainEventPMSuspendDiskRegister(dom *Domain, callback DomainE
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1251,13 +1266,14 @@ func (c *Connect) DomainEventDeviceRemovedRegister(dom *Domain, callback DomainE
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1270,13 +1286,14 @@ func (c *Connect) DomainEventBlockJob2Register(dom *Domain, callback DomainEvent
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1289,13 +1306,14 @@ func (c *Connect) DomainEventTunableRegister(dom *Domain, callback DomainEventTu
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_TUNABLE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1308,13 +1326,14 @@ func (c *Connect) DomainEventAgentLifecycleRegister(dom *Domain, callback Domain
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1327,13 +1346,14 @@ func (c *Connect) DomainEventDeviceAddedRegister(dom *Domain, callback DomainEve
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_DEVICE_ADDED,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1346,13 +1366,14 @@ func (c *Connect) DomainEventMigrationIterationRegister(dom *Domain, callback Do
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1365,13 +1386,14 @@ func (c *Connect) DomainEventJobCompletedRegister(dom *Domain, callback DomainEv
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_JOB_COMPLETED,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1384,13 +1406,14 @@ func (c *Connect) DomainEventDeviceRemovalFailedRegister(dom *Domain, callback D
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1403,13 +1426,14 @@ func (c *Connect) DomainEventMetadataChangeRegister(dom *Domain, callback Domain
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_METADATA_CHANGE,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -1422,21 +1446,24 @@ func (c *Connect) DomainEventBlockThresholdRegister(dom *Domain, callback Domain
 	if dom != nil {
 		cdom = dom.ptr
 	}
+	var err C.virError
 	ret := C.virConnectDomainEventRegisterAnyWrapper(c.ptr, cdom,
 		C.VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD,
 		C.virConnectDomainEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
 
 func (c *Connect) DomainEventDeregister(callbackId int) error {
 	// Deregister the callback
-	if i := int(C.virConnectDomainEventDeregisterAny(c.ptr, C.int(callbackId))); i != 0 {
-		return GetLastError()
+	var err C.virError
+	ret := int(C.virConnectDomainEventDeregisterAnyWrapper(c.ptr, C.int(callbackId), &err))
+	if ret < 0 {
+		return makeError(&err)
 	}
 	return nil
 }
diff --git a/domain_events_wrapper.go b/domain_events_wrapper.go
index 07b9418..5d74fee 100644
--- a/domain_events_wrapper.go
+++ b/domain_events_wrapper.go
@@ -225,12 +225,35 @@ void domainEventBlockThresholdCallbackHelper(virConnectPtr conn,
     domainEventBlockThresholdCallback(conn, dom, dev, path, threshold, excess, (int)(intptr_t)opaque);
 }
 
-int virConnectDomainEventRegisterAnyWrapper(virConnectPtr c,  virDomainPtr d,
-                                         int eventID, virConnectDomainEventGenericCallback cb,
-                                         long goCallbackId) {
-    void* id = (void*)goCallbackId;
-    return virConnectDomainEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+int
+virConnectDomainEventRegisterAnyWrapper(virConnectPtr c,
+                                        virDomainPtr d,
+                                        int eventID,
+                                        virConnectDomainEventGenericCallback cb,
+                                        long goCallbackId,
+                                        virErrorPtr err)
+{
+    void *id = (void*)goCallbackId;
+    int ret = virConnectDomainEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virConnectDomainEventDeregisterAnyWrapper(virConnectPtr conn,
+                                          int callbackID,
+                                          virErrorPtr err)
+{
+    int ret = virConnectDomainEventDeregisterAny(conn, callbackID);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 }
 
+
 */
 import "C"
diff --git a/domain_events_wrapper.h b/domain_events_wrapper.h
index 4016497..1670acd 100644
--- a/domain_events_wrapper.h
+++ b/domain_events_wrapper.h
@@ -196,7 +196,12 @@ virConnectDomainEventRegisterAnyWrapper(virConnectPtr c,
                                         virDomainPtr d,
                                         int eventID,
                                         virConnectDomainEventGenericCallback cb,
-                                        long goCallbackId);
+                                        long goCallbackId,
+					virErrorPtr err);
+int
+virConnectDomainEventDeregisterAnyWrapper(virConnectPtr conn,
+                                          int callbackID,
+                                          virErrorPtr err);
 
 
 #endif /* LIBVIRT_GO_DOMAIN_EVENTS_WRAPPER_H__ */
diff --git a/events.go b/events.go
index 217b033..bf2c1f4 100644
--- a/events.go
+++ b/events.go
@@ -44,16 +44,18 @@ const (
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRegisterDefaultImpl
 func EventRegisterDefaultImpl() error {
-	if i := int(C.virEventRegisterDefaultImpl()); i != 0 {
-		return GetLastError()
+	var err C.virError
+	if i := int(C.virEventRegisterDefaultImplWrapper(&err)); i != 0 {
+		return makeError(&err)
 	}
 	return nil
 }
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRunDefaultImpl
 func EventRunDefaultImpl() error {
-	if i := int(C.virEventRunDefaultImpl()); i != 0 {
-		return GetLastError()
+	var err C.virError
+	if i := int(C.virEventRunDefaultImplWrapper(&err)); i != 0 {
+		return makeError(&err)
 	}
 	return nil
 }
@@ -76,9 +78,10 @@ func eventHandleCallback(watch int, fd int, events int, callbackID int) {
 func EventAddHandle(fd int, events EventHandleType, callback EventHandleCallback) (int, error) {
 	callbackID := registerCallbackId(callback)
 
-	ret := C.virEventAddHandleWrapper((C.int)(fd), (C.int)(events), (C.int)(callbackID))
+	var err C.virError
+	ret := C.virEventAddHandleWrapper((C.int)(fd), (C.int)(events), (C.int)(callbackID), &err)
 	if ret == -1 {
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 
 	return int(ret), nil
@@ -90,8 +93,14 @@ func EventUpdateHandle(watch int, events EventHandleType) {
 }
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRemoveHandle
-func EventRemoveHandle(watch int) {
-	C.virEventRemoveHandle((C.int)(watch))
+func EventRemoveHandle(watch int) error {
+	var err C.virError
+	ret := C.virEventRemoveHandleWrapper((C.int)(watch), &err)
+	if ret < 0 {
+		return makeError(&err)
+	}
+
+	return nil
 }
 
 type EventTimeoutCallback func(timer int)
@@ -112,9 +121,10 @@ func eventTimeoutCallback(timer int, callbackID int) {
 func EventAddTimeout(freq int, callback EventTimeoutCallback) (int, error) {
 	callbackID := registerCallbackId(callback)
 
-	ret := C.virEventAddTimeoutWrapper((C.int)(freq), (C.int)(callbackID))
+	var err C.virError
+	ret := C.virEventAddTimeoutWrapper((C.int)(freq), (C.int)(callbackID), &err)
 	if ret == -1 {
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 
 	return int(ret), nil
@@ -126,8 +136,14 @@ func EventUpdateTimeout(timer int, freq int) {
 }
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRemoveTimeout
-func EventRemoveTimeout(timer int) {
-	C.virEventRemoveTimeout((C.int)(timer))
+func EventRemoveTimeout(timer int) error {
+	var err C.virError
+	ret := C.virEventRemoveTimeoutWrapper((C.int)(timer), &err)
+	if ret < 0 {
+		return makeError(&err)
+	}
+
+	return nil
 }
 
 type EventHandleCallbackInfo struct {
diff --git a/events_wrapper.go b/events_wrapper.go
index ffcffb9..6814589 100644
--- a/events_wrapper.go
+++ b/events_wrapper.go
@@ -39,11 +39,6 @@ static void eventAddHandleHelper(int watch, int fd, int events, void *opaque)
     eventHandleCallback(watch, fd, events, (int)(intptr_t)opaque);
 }
 
-int virEventAddHandleWrapper(int fd, int events, int callbackID)
-{
-    return virEventAddHandle(fd, events, eventAddHandleHelper, (void *)(intptr_t)callbackID, NULL);
-}
-
 void eventTimeoutCallback(int timer, int callbackID);
 
 static void eventAddTimeoutHelper(int timer, void *opaque)
@@ -51,11 +46,6 @@ static void eventAddTimeoutHelper(int timer, void *opaque)
     eventTimeoutCallback(timer, (int)(intptr_t)opaque);
 }
 
-int virEventAddTimeoutWrapper(int freq, int callbackID)
-{
-    return virEventAddTimeout(freq, eventAddTimeoutHelper, (void *)(intptr_t)callbackID, NULL);
-}
-
 int eventAddHandleFunc(int fd, int event, uintptr_t callback, uintptr_t opaque, uintptr_t freecb);
 void eventUpdateHandleFunc(int watch, int event);
 int eventRemoveHandleFunc(int watch);
@@ -126,5 +116,78 @@ void eventTimeoutCallbackFree(uintptr_t callback, uintptr_t opaque)
 }
 
 
+int
+virEventAddHandleWrapper(int fd,
+                         int events,
+                         int callbackID,
+                         virErrorPtr err)
+{
+    int ret = virEventAddHandle(fd, events, eventAddHandleHelper, (void *)(intptr_t)callbackID, NULL);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virEventAddTimeoutWrapper(int timeout,
+                          int callbackID,
+                          virErrorPtr err)
+{
+    int ret = virEventAddTimeout(timeout, eventAddTimeoutHelper, (void *)(intptr_t)callbackID, NULL);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virEventRegisterDefaultImplWrapper(virErrorPtr err)
+{
+    int ret = virEventRegisterDefaultImpl();
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virEventRemoveHandleWrapper(int watch,
+                            virErrorPtr err)
+{
+    int ret = virEventRemoveHandle(watch);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virEventRemoveTimeoutWrapper(int timer,
+                             virErrorPtr err)
+{
+    int ret = virEventRemoveTimeout(timer);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
+int
+virEventRunDefaultImplWrapper(virErrorPtr err)
+{
+    int ret = virEventRunDefaultImpl();
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
 */
 import "C"
diff --git a/events_wrapper.h b/events_wrapper.h
index 9e9607c..62ea9c8 100644
--- a/events_wrapper.h
+++ b/events_wrapper.h
@@ -30,15 +30,6 @@
 #include <libvirt/libvirt.h>
 #include <libvirt/virterror.h>
 
-int
-virEventAddHandleWrapper(int fd,
-                         int events,
-                         int callbackID);
-
-int
-virEventAddTimeoutWrapper(int freq,
-                          int callbackID);
-
 void
 virEventRegisterImplWrapper(void);
 
@@ -62,4 +53,30 @@ void
 eventTimeoutCallbackFree(uintptr_t callback,
                          uintptr_t opaque);
 
+int
+virEventAddHandleWrapper(int fd,
+                         int events,
+			 int callbackID,
+                         virErrorPtr err);
+
+int
+virEventAddTimeoutWrapper(int timeout,
+			  int callbackID,
+                          virErrorPtr err);
+
+int
+virEventRegisterDefaultImplWrapper(virErrorPtr err);
+
+int
+virEventRemoveHandleWrapper(int watch,
+                            virErrorPtr err);
+
+int
+virEventRemoveTimeoutWrapper(int timer,
+                             virErrorPtr err);
+
+int
+virEventRunDefaultImplWrapper(virErrorPtr err);
+
+
 #endif /* LIBVIRT_GO_EVENTS_WRAPPER_H__ */
diff --git a/network_events.go b/network_events.go
index 7414608..8ed16d9 100644
--- a/network_events.go
+++ b/network_events.go
@@ -77,13 +77,14 @@ func (c *Connect) NetworkEventLifecycleRegister(net *Network, callback NetworkEv
 	if net != nil {
 		cnet = net.ptr
 	}
+	var err C.virError
 	ret := C.virConnectNetworkEventRegisterAnyWrapper(c.ptr, cnet,
 		C.VIR_NETWORK_EVENT_ID_LIFECYCLE,
 		C.virConnectNetworkEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -93,8 +94,10 @@ func (c *Connect) NetworkEventDeregister(callbackId int) error {
 		return GetNotImplementedError("virConnectNetworkEventDeregisterAny")
 	}
 	// Deregister the callback
-	if i := int(C.virConnectNetworkEventDeregisterAnyWrapper(c.ptr, C.int(callbackId))); i != 0 {
-		return GetLastError()
+	var err C.virError
+	ret := int(C.virConnectNetworkEventDeregisterAnyWrapper(c.ptr, C.int(callbackId), &err))
+	if ret < 0 {
+		return makeError(&err)
 	}
 	return nil
 }
diff --git a/network_events_wrapper.go b/network_events_wrapper.go
index a8a5d81..4e424ba 100644
--- a/network_events_wrapper.go
+++ b/network_events_wrapper.go
@@ -40,24 +40,38 @@ void networkEventLifecycleCallbackHelper(virConnectPtr c, virNetworkPtr d,
     networkEventLifecycleCallback(c, d, event, detail, (int)(intptr_t)data);
 }
 
-int virConnectNetworkEventRegisterAnyWrapper(virConnectPtr c,  virNetworkPtr d,
-                                         int eventID, virConnectNetworkEventGenericCallback cb,
-                                         long goCallbackId) {
+int
+virConnectNetworkEventRegisterAnyWrapper(virConnectPtr c,
+                                         virNetworkPtr d,
+                                         int eventID,
+                                         virConnectNetworkEventGenericCallback cb,
+                                         long goCallbackId,
+                                         virErrorPtr err)
+{
     void* id = (void*)goCallbackId;
 #if LIBVIR_VERSION_NUMBER < 1002001
     assert(0); // Caller should have checked version
 #else
-    return virConnectNetworkEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    int ret = virConnectNetworkEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
 int virConnectNetworkEventDeregisterAnyWrapper(virConnectPtr conn,
-					      int callbackID)
+                                               int callbackID,
+                                               virErrorPtr err)
 {
 #if LIBVIR_VERSION_NUMBER < 1002001
     assert(0); // Caller should have checked version
 #else
-    return virConnectNetworkEventDeregisterAny(conn, callbackID);
+    int ret = virConnectNetworkEventDeregisterAny(conn, callbackID);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
diff --git a/network_events_wrapper.h b/network_events_wrapper.h
index 201be64..789837a 100644
--- a/network_events_wrapper.h
+++ b/network_events_wrapper.h
@@ -43,18 +43,13 @@ virConnectNetworkEventRegisterAnyWrapper(virConnectPtr c,
                                          virNetworkPtr d,
                                          int eventID,
                                          virConnectNetworkEventGenericCallback cb,
-                                         long goCallbackId);
-
-int
-virConnectNetworkEventRegisterAnyWrapper(virConnectPtr c,
-                                         virNetworkPtr d,
-                                         int eventID,
-                                         virConnectNetworkEventGenericCallback cb,
-                                         long goCallbackId);
+                                         long goCallbackId,
+					 virErrorPtr err);
 
 int
 virConnectNetworkEventDeregisterAnyWrapper(virConnectPtr conn,
-                                           int callbackID);
+                                           int callbackID,
+					   virErrorPtr err);
 
 
 #endif /* LIBVIRT_GO_NETWORK_EVENTS_WRAPPER_H__ */
diff --git a/node_device_events.go b/node_device_events.go
index 5d66687..632c94d 100644
--- a/node_device_events.go
+++ b/node_device_events.go
@@ -94,13 +94,14 @@ func (c *Connect) NodeDeviceEventLifecycleRegister(device *NodeDevice, callback
 	if device != nil {
 		cdevice = device.ptr
 	}
+	var err C.virError
 	ret := C.virConnectNodeDeviceEventRegisterAnyWrapper(c.ptr, cdevice,
 		C.VIR_NODE_DEVICE_EVENT_ID_LIFECYCLE,
 		C.virConnectNodeDeviceEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -113,13 +114,14 @@ func (c *Connect) NodeDeviceEventUpdateRegister(device *NodeDevice, callback Nod
 	if device != nil {
 		cdevice = device.ptr
 	}
+	var err C.virError
 	ret := C.virConnectNodeDeviceEventRegisterAnyWrapper(c.ptr, cdevice,
 		C.VIR_NODE_DEVICE_EVENT_ID_UPDATE,
 		C.virConnectNodeDeviceEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -129,8 +131,10 @@ func (c *Connect) NodeDeviceEventDeregister(callbackId int) error {
 		return GetNotImplementedError("virConnectNodeDeviceEventDeregisterAny")
 	}
 	// Deregister the callback
-	if i := int(C.virConnectNodeDeviceEventDeregisterAnyWrapper(c.ptr, C.int(callbackId))); i != 0 {
-		return GetLastError()
+	var err C.virError
+	ret := int(C.virConnectNodeDeviceEventDeregisterAnyWrapper(c.ptr, C.int(callbackId), &err))
+	if ret < 0 {
+		return makeError(&err)
 	}
 	return nil
 }
diff --git a/node_device_events_wrapper.go b/node_device_events_wrapper.go
index a8b0c93..8b2e624 100644
--- a/node_device_events_wrapper.go
+++ b/node_device_events_wrapper.go
@@ -46,24 +46,41 @@ void nodeDeviceEventGenericCallbackHelper(virConnectPtr c, virNodeDevicePtr d, v
     nodeDeviceEventGenericCallback(c, d, (int)(intptr_t)data);
 }
 
-int virConnectNodeDeviceEventRegisterAnyWrapper(virConnectPtr c,  virNodeDevicePtr d,
-                                              int eventID, virConnectNodeDeviceEventGenericCallback cb,
-                                              long goCallbackId) {
+
+int
+virConnectNodeDeviceEventRegisterAnyWrapper(virConnectPtr c,
+                                            virNodeDevicePtr d,
+                                            int eventID,
+                                            virConnectNodeDeviceEventGenericCallback cb,
+                                            long goCallbackId,
+                                            virErrorPtr err)
+{
     void* id = (void*)goCallbackId;
 #if LIBVIR_VERSION_NUMBER < 2002000
     assert(0); // Caller should have checked version
 #else
-    return virConnectNodeDeviceEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    int ret = virConnectNodeDeviceEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
-int virConnectNodeDeviceEventDeregisterAnyWrapper(virConnectPtr conn,
-						 int callbackID)
+
+int
+virConnectNodeDeviceEventDeregisterAnyWrapper(virConnectPtr conn,
+                                              int callbackID,
+                                              virErrorPtr err)
 {
 #if LIBVIR_VERSION_NUMBER < 2002000
     assert(0); // Caller should have checked version
 #else
-    return virConnectNodeDeviceEventDeregisterAny(conn, callbackID);
+    int ret = virConnectNodeDeviceEventDeregisterAny(conn, callbackID);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
diff --git a/node_device_events_wrapper.h b/node_device_events_wrapper.h
index a3d014d..fb691d2 100644
--- a/node_device_events_wrapper.h
+++ b/node_device_events_wrapper.h
@@ -48,11 +48,13 @@ virConnectNodeDeviceEventRegisterAnyWrapper(virConnectPtr c,
                                             virNodeDevicePtr d,
                                             int eventID,
                                             virConnectNodeDeviceEventGenericCallback cb,
-                                            long goCallbackId);
+                                            long goCallbackId,
+					    virErrorPtr err);
 
 int
 virConnectNodeDeviceEventDeregisterAnyWrapper(virConnectPtr conn,
-                                              int callbackID);
+                                              int callbackID,
+					      virErrorPtr err);
 
 
 #endif /* LIBVIRT_GO_NODE_DEVICE_EVENTS_WRAPPER_H__ */
diff --git a/secret_events.go b/secret_events.go
index d24146f..38605ba 100644
--- a/secret_events.go
+++ b/secret_events.go
@@ -94,13 +94,14 @@ func (c *Connect) SecretEventLifecycleRegister(secret *Secret, callback SecretEv
 	if secret != nil {
 		csecret = secret.ptr
 	}
+	var err C.virError
 	ret := C.virConnectSecretEventRegisterAnyWrapper(c.ptr, csecret,
 		C.VIR_SECRET_EVENT_ID_LIFECYCLE,
 		C.virConnectSecretEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -116,13 +117,14 @@ func (c *Connect) SecretEventValueChangedRegister(secret *Secret, callback Secre
 	if secret != nil {
 		csecret = secret.ptr
 	}
+	var err C.virError
 	ret := C.virConnectSecretEventRegisterAnyWrapper(c.ptr, csecret,
 		C.VIR_SECRET_EVENT_ID_VALUE_CHANGED,
 		C.virConnectSecretEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -132,8 +134,10 @@ func (c *Connect) SecretEventDeregister(callbackId int) error {
 		return GetNotImplementedError("virConnectSecretEventDeregisterAny")
 	}
 	// Deregister the callback
-	if i := int(C.virConnectSecretEventDeregisterAnyWrapper(c.ptr, C.int(callbackId))); i != 0 {
-		return GetLastError()
+	var err C.virError
+	ret := int(C.virConnectSecretEventDeregisterAnyWrapper(c.ptr, C.int(callbackId), &err))
+	if ret < 0 {
+		return makeError(&err)
 	}
 	return nil
 }
diff --git a/secret_events_wrapper.go b/secret_events_wrapper.go
index 04b5f4f..a543e7f 100644
--- a/secret_events_wrapper.go
+++ b/secret_events_wrapper.go
@@ -47,24 +47,39 @@ void secretEventGenericCallbackHelper(virConnectPtr c, virSecretPtr d,
     secretEventGenericCallback(c, d, (int)(intptr_t)data);
 }
 
-int virConnectSecretEventRegisterAnyWrapper(virConnectPtr c,  virSecretPtr d,
-                                         int eventID, virConnectSecretEventGenericCallback cb,
-                                         long goCallbackId) {
+
+int
+virConnectSecretEventRegisterAnyWrapper(virConnectPtr c,
+                                        virSecretPtr d,
+                                        int eventID,
+                                        virConnectSecretEventGenericCallback cb,
+                                        long goCallbackId,
+                                        virErrorPtr err)
+{
     void* id = (void*)goCallbackId;
 #if LIBVIR_VERSION_NUMBER < 3000000
     assert(0); // Caller should have checked version
 #else
-    return virConnectSecretEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    int ret = virConnectSecretEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
 int virConnectSecretEventDeregisterAnyWrapper(virConnectPtr conn,
-					      int callbackID)
+                                              int callbackID,
+                                              virErrorPtr err)
 {
 #if LIBVIR_VERSION_NUMBER < 3000000
     assert(0); // Caller should have checked version
 #else
-    return virConnectSecretEventDeregisterAny(conn, callbackID);
+    int ret = virConnectSecretEventDeregisterAny(conn, callbackID);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
diff --git a/secret_events_wrapper.h b/secret_events_wrapper.h
index bf1c571..5101bc0 100644
--- a/secret_events_wrapper.h
+++ b/secret_events_wrapper.h
@@ -47,10 +47,12 @@ virConnectSecretEventRegisterAnyWrapper(virConnectPtr c,
                                         virSecretPtr d,
                                         int eventID,
                                         virConnectSecretEventGenericCallback cb,
-                                        long goCallbackId);
+                                        long goCallbackId,
+					virErrorPtr err);
 
 int
 virConnectSecretEventDeregisterAnyWrapper(virConnectPtr conn,
-                                          int callbackID);
+                                          int callbackID,
+					  virErrorPtr err);
 
 #endif /* LIBVIRT_GO_SECRET_EVENTS_WRAPPER_H__ */
diff --git a/storage_pool_events.go b/storage_pool_events.go
index 15fb90b..55c9f4e 100644
--- a/storage_pool_events.go
+++ b/storage_pool_events.go
@@ -95,13 +95,14 @@ func (c *Connect) StoragePoolEventLifecycleRegister(pool *StoragePool, callback
 	if pool != nil {
 		cpool = pool.ptr
 	}
+	var err C.virError
 	ret := C.virConnectStoragePoolEventRegisterAnyWrapper(c.ptr, cpool,
 		C.VIR_STORAGE_POOL_EVENT_ID_LIFECYCLE,
 		C.virConnectStoragePoolEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -118,13 +119,14 @@ func (c *Connect) StoragePoolEventRefreshRegister(pool *StoragePool, callback St
 	if pool != nil {
 		cpool = pool.ptr
 	}
+	var err C.virError
 	ret := C.virConnectStoragePoolEventRegisterAnyWrapper(c.ptr, cpool,
 		C.VIR_STORAGE_POOL_EVENT_ID_REFRESH,
 		C.virConnectStoragePoolEventGenericCallback(callbackPtr),
-		C.long(goCallBackId))
+		C.long(goCallBackId), &err)
 	if ret == -1 {
 		freeCallbackId(goCallBackId)
-		return 0, GetLastError()
+		return 0, makeError(&err)
 	}
 	return int(ret), nil
 }
@@ -135,8 +137,10 @@ func (c *Connect) StoragePoolEventDeregister(callbackId int) error {
 	}
 
 	// Deregister the callback
-	if i := int(C.virConnectStoragePoolEventDeregisterAnyWrapper(c.ptr, C.int(callbackId))); i != 0 {
-		return GetLastError()
+	var err C.virError
+	ret := int(C.virConnectStoragePoolEventDeregisterAnyWrapper(c.ptr, C.int(callbackId), &err))
+	if ret < 0 {
+		return makeError(&err)
 	}
 	return nil
 }
diff --git a/storage_pool_events_wrapper.go b/storage_pool_events_wrapper.go
index df9b092..c551038 100644
--- a/storage_pool_events_wrapper.go
+++ b/storage_pool_events_wrapper.go
@@ -47,24 +47,41 @@ void storagePoolEventGenericCallbackHelper(virConnectPtr c, virStoragePoolPtr d,
     storagePoolEventGenericCallback(c, d, (int)(intptr_t)data);
 }
 
-int virConnectStoragePoolEventRegisterAnyWrapper(virConnectPtr c,  virStoragePoolPtr d,
-                                              int eventID, virConnectStoragePoolEventGenericCallback cb,
-                                              long goCallbackId) {
+
+int
+virConnectStoragePoolEventRegisterAnyWrapper(virConnectPtr c,
+                                             virStoragePoolPtr d,
+                                             int eventID,
+                                             virConnectStoragePoolEventGenericCallback cb,
+                                             long goCallbackId,
+                                             virErrorPtr err)
+{
 #if LIBVIR_VERSION_NUMBER < 2000000
     assert(0); // Caller should have checked version
 #else
     void* id = (void*)goCallbackId;
-    return virConnectStoragePoolEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    int ret = virConnectStoragePoolEventRegisterAny(c, d, eventID, cb, id, freeGoCallbackHelper);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
-int virConnectStoragePoolEventDeregisterAnyWrapper(virConnectPtr conn,
-						  int callbackID)
+
+int
+virConnectStoragePoolEventDeregisterAnyWrapper(virConnectPtr conn,
+                                               int callbackID,
+                                               virErrorPtr err)
 {
 #if LIBVIR_VERSION_NUMBER < 2000000
     assert(0); // Caller shouuld have checked version
 #else
-    return virConnectStoragePoolEventDeregisterAny(conn, callbackID);
+    int ret = virConnectStoragePoolEventDeregisterAny(conn, callbackID);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
 #endif
 }
 
diff --git a/storage_pool_events_wrapper.h b/storage_pool_events_wrapper.h
index 84dcc8f..7007f1c 100644
--- a/storage_pool_events_wrapper.h
+++ b/storage_pool_events_wrapper.h
@@ -48,10 +48,12 @@ virConnectStoragePoolEventRegisterAnyWrapper(virConnectPtr c,
                                              virStoragePoolPtr d,
                                              int eventID,
                                              virConnectStoragePoolEventGenericCallback cb,
-                                             long goCallbackId);
+                                             long goCallbackId,
+					     virErrorPtr err);
 
 int
 virConnectStoragePoolEventDeregisterAnyWrapper(virConnectPtr conn,
-                                               int callbackID);
+                                               int callbackID,
+					       virErrorPtr err);
 
 #endif /* LIBVIRT_GO_STORAGE_POOL_EVENTS_WRAPPER_H__ */
-- 
2.17.1




More information about the libvir-list mailing list