|
@@ -188,21 +188,28 @@ void qemu_co_queue_init(CoQueue *queue);
|
|
void coroutine_fn qemu_co_queue_wait_impl(CoQueue *queue, QemuLockable *lock);
|
|
void coroutine_fn qemu_co_queue_wait_impl(CoQueue *queue, QemuLockable *lock);
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Restarts the next coroutine in the CoQueue and removes it from the queue.
|
|
|
|
- *
|
|
|
|
- * Returns true if a coroutine was restarted, false if the queue is empty.
|
|
|
|
|
|
+ * Removes the next coroutine from the CoQueue, and wake it up.
|
|
|
|
+ * Returns true if a coroutine was removed, false if the queue is empty.
|
|
*/
|
|
*/
|
|
bool coroutine_fn qemu_co_queue_next(CoQueue *queue);
|
|
bool coroutine_fn qemu_co_queue_next(CoQueue *queue);
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Restarts all coroutines in the CoQueue and leaves the queue empty.
|
|
|
|
|
|
+ * Empties the CoQueue; all coroutines are woken up.
|
|
*/
|
|
*/
|
|
void coroutine_fn qemu_co_queue_restart_all(CoQueue *queue);
|
|
void coroutine_fn qemu_co_queue_restart_all(CoQueue *queue);
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Enter the next coroutine in the queue
|
|
|
|
|
|
+ * Removes the next coroutine from the CoQueue, and wake it up. Unlike
|
|
|
|
+ * qemu_co_queue_next, this function releases the lock during aio_co_wake
|
|
|
|
+ * because it is meant to be used outside coroutine context; in that case, the
|
|
|
|
+ * coroutine is entered immediately, before qemu_co_enter_next returns.
|
|
|
|
+ *
|
|
|
|
+ * If used in coroutine context, qemu_co_enter_next is equivalent to
|
|
|
|
+ * qemu_co_queue_next.
|
|
*/
|
|
*/
|
|
-bool qemu_co_enter_next(CoQueue *queue);
|
|
|
|
|
|
+#define qemu_co_enter_next(queue, lock) \
|
|
|
|
+ qemu_co_enter_next_impl(queue, QEMU_MAKE_LOCKABLE(lock))
|
|
|
|
+bool qemu_co_enter_next_impl(CoQueue *queue, QemuLockable *lock);
|
|
|
|
|
|
/**
|
|
/**
|
|
* Checks if the CoQueue is empty.
|
|
* Checks if the CoQueue is empty.
|