}
}
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("could not find event callback for removal"));
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("could not find event callback %d for deletion"),
+ callbackID);
return -1;
}
}
}
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("could not find event callback for deletion"));
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("could not find event callback %d for deletion"),
+ callbackID);
return -1;
}
if (virObjectEventCallbackLookup(conn, cbList, uuid,
klass, eventID, callback,
!callbackID) != -1) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
_("event callback already tracked"));
return -1;
}
}
-static int
-virObjectEventCallbackListEventID(virConnectPtr conn,
- virObjectEventCallbackListPtr cbList,
- int callbackID)
-{
- size_t i;
-
- for (i = 0; i < cbList->count; i++) {
- virObjectEventCallbackPtr cb = cbList->callbacks[i];
-
- if (cb->deleted)
- continue;
-
- if (cb->callbackID == callbackID && cb->conn == conn)
- return cb->eventID;
- }
-
- return -1;
-}
-
-
/**
* virObjectEventQueueClear:
* @queue: pointer to the queue
virObjectEventStateUnlock(state);
if (ret < 0)
- virReportError(VIR_ERR_INTERNAL_ERROR,
+ virReportError(VIR_ERR_INVALID_ARG,
_("event callback function %p not registered"),
callback);
return ret;
virObjectEventStatePtr state,
int callbackID)
{
- int ret;
+ int ret = -1;
+ size_t i;
+ virObjectEventCallbackListPtr cbList = state->callbacks;
virObjectEventStateLock(state);
- ret = virObjectEventCallbackListEventID(conn,
- state->callbacks, callbackID);
+ for (i = 0; i < cbList->count; i++) {
+ virObjectEventCallbackPtr cb = cbList->callbacks[i];
+
+ if (cb->deleted)
+ continue;
+
+ if (cb->callbackID == callbackID && cb->conn == conn) {
+ ret = cb->eventID;
+ break;
+ }
+ }
virObjectEventStateUnlock(state);
+
+ if (ret < 0)
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("event callback id %d not registered"),
+ callbackID);
return ret;
}
return rv;
}
+
static int
remoteConnectNetworkEventRegisterAny(virConnectPtr conn,
virNetworkPtr net,
remoteDriverLock(priv);
if ((eventID = virObjectEventStateEventID(conn, priv->eventState,
- callbackID)) < 0) {
- virReportError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
+ callbackID)) < 0)
goto done;
- }
if ((count = virObjectEventStateDeregisterID(conn, priv->eventState,
- callbackID)) < 0) {
- virReportError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
+ callbackID)) < 0)
goto done;
- }
/* If that was the last callback for this eventID, we need to disable
* events on the server */
return rv;
}
+
static int
remoteConnectListAllInterfaces(virConnectPtr conn,
virInterfacePtr **ifaces,
#endif /* WITH_POLKIT */
/*----------------------------------------------------------------------*/
-static int remoteConnectDomainEventRegister(virConnectPtr conn,
- virConnectDomainEventCallback callback,
- void *opaque,
- virFreeCallback freecb)
+static int
+remoteConnectDomainEventRegister(virConnectPtr conn,
+ virConnectDomainEventCallback callback,
+ void *opaque,
+ virFreeCallback freecb)
{
int rv = -1;
struct private_data *priv = conn->privateData;
goto done;
if (count == 1) {
- /* Tell the server when we are the first callback deregistering */
+ /* Tell the server when we are the first callback registering */
if (call(conn, priv, 0, REMOTE_PROC_CONNECT_DOMAIN_EVENT_REGISTER,
(xdrproc_t) xdr_void, (char *) NULL,
- (xdrproc_t) xdr_void, (char *) NULL) == -1)
+ (xdrproc_t) xdr_void, (char *) NULL) == -1) {
+ virDomainEventStateDeregister(conn, priv->eventState, callback);
goto done;
+ }
}
rv = 0;
return rv;
}
-static int remoteConnectDomainEventDeregister(virConnectPtr conn,
- virConnectDomainEventCallback callback)
+static int
+remoteConnectDomainEventDeregister(virConnectPtr conn,
+ virConnectDomainEventCallback callback)
{
struct private_data *priv = conn->privateData;
int rv = -1;
};
-static int remoteConnectDomainEventRegisterAny(virConnectPtr conn,
- virDomainPtr dom,
- int eventID,
- virConnectDomainEventGenericCallback callback,
- void *opaque,
- virFreeCallback freecb)
+static int
+remoteConnectDomainEventRegisterAny(virConnectPtr conn,
+ virDomainPtr dom,
+ int eventID,
+ virConnectDomainEventGenericCallback callback,
+ void *opaque,
+ virFreeCallback freecb)
{
int rv = -1;
struct private_data *priv = conn->privateData;
}
-static int remoteConnectDomainEventDeregisterAny(virConnectPtr conn,
- int callbackID)
+static int
+remoteConnectDomainEventDeregisterAny(virConnectPtr conn,
+ int callbackID)
{
struct private_data *priv = conn->privateData;
int rv = -1;
remoteDriverLock(priv);
if ((eventID = virObjectEventStateEventID(conn, priv->eventState,
- callbackID)) < 0) {
- virReportError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
+ callbackID)) < 0)
goto done;
- }
if ((count = virObjectEventStateDeregisterID(conn, priv->eventState,
- callbackID)) < 0) {
- virReportError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
+ callbackID)) < 0)
goto done;
- }
/* If that was the last callback for this eventID, we need to disable
* events on the server */