static void virObjectEventStateFlush(virObjectEventStatePtr state) { virObjectEventQueue tempQueue; virObjectEventStateLock(state); state->isDispatching = true; /* Copy the queue, so we're reentrant safe when dispatchFunc drops the * driver lock */ tempQueue.count = state->queue->count; tempQueue.events = state->queue->events; state->queue->count = 0; state->queue->events = NULL; virEventUpdateTimeout(state->timer, -1); virObjectEventStateQueueDispatch(state, &tempQueue, state->callbacks); /* Purge any deleted callbacks */ virObjectEventCallbackListPurgeMarked(state->callbacks); state->isDispatching = false; virObjectEventStateUnlock(state); }
static void virObjectEventStateFlush(virObjectEventStatePtr state) { virObjectEventQueue tempQueue; /* We need to lock as well as ref due to the fact that we might * unref the state we're working on in this very function */ virObjectRef(state); virObjectLock(state); state->isDispatching = true; /* Copy the queue, so we're reentrant safe when dispatchFunc drops the * driver lock */ tempQueue.count = state->queue->count; tempQueue.events = state->queue->events; state->queue->count = 0; state->queue->events = NULL; if (state->timer != -1) virEventUpdateTimeout(state->timer, -1); virObjectEventStateQueueDispatch(state, &tempQueue, state->callbacks); /* Purge any deleted callbacks */ virObjectEventCallbackListPurgeMarked(state->callbacks); /* If we purged all callbacks, we need to remove the timeout as * well like virObjectEventStateDeregisterID() would do. */ virObjectEventStateCleanupTimer(state, true); state->isDispatching = false; virObjectUnlock(state); virObjectUnref(state); }