From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52213) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2mu7-0003Aw-JO for qemu-devel@nongnu.org; Fri, 26 Jul 2013 14:38:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V2mu3-0004BS-R3 for qemu-devel@nongnu.org; Fri, 26 Jul 2013 14:38:15 -0400 Received: from mail.avalus.com ([2001:41c8:10:1dd::10]:55513) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2mu3-0004BC-KQ for qemu-devel@nongnu.org; Fri, 26 Jul 2013 14:38:11 -0400 From: Alex Bligh Date: Fri, 26 Jul 2013 19:37:35 +0100 Message-Id: <1374863862-32517-7-git-send-email-alex@alex.org.uk> In-Reply-To: <1374863862-32517-1-git-send-email-alex@alex.org.uk> References: <34B083D4DB6D2988A571E420@nimrod.local> <1374863862-32517-1-git-send-email-alex@alex.org.uk> Subject: [Qemu-devel] [RFC] [PATCHv4 06/13] aio / timers: Add a QEMUTimerList to AioContext List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Anthony Liguori , Alex Bligh , Stefan Hajnoczi , Paolo Bonzini , rth@twiddle.net Add a QEMUTimerList to each AioContext and delete it when the AioContext is freed. Signed-off-by: Alex Bligh --- async.c | 7 +++++++ include/block/aio.h | 5 +++++ tests/test-aio.c | 3 +++ tests/test-thread-pool.c | 3 +++ 4 files changed, 18 insertions(+) diff --git a/async.c b/async.c index 90fe906..8acbd4c 100644 --- a/async.c +++ b/async.c @@ -177,6 +177,7 @@ aio_ctx_finalize(GSource *source) aio_set_event_notifier(ctx, &ctx->notifier, NULL, NULL); event_notifier_cleanup(&ctx->notifier); g_array_free(ctx->pollfds, TRUE); + qemu_free_timerlist(ctx->tl); } static GSourceFuncs aio_source_funcs = { @@ -215,6 +216,12 @@ AioContext *aio_context_new(void) aio_set_event_notifier(ctx, &ctx->notifier, (EventNotifierHandler *) event_notifier_test_and_clear, NULL); + /* Assert if we don't have rt_clock yet. If you see this assertion + * it means you are using AioContext without having first called + * init_clocks() in main(). + */ + assert(rt_clock); + ctx->tl = qemu_new_timerlist(rt_clock); return ctx; } diff --git a/include/block/aio.h b/include/block/aio.h index 1836793..1595167 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -41,6 +41,8 @@ typedef struct AioHandler AioHandler; typedef void QEMUBHFunc(void *opaque); typedef void IOHandler(void *opaque); +typedef struct QEMUTimerList QEMUTimerList; + typedef struct AioContext { GSource source; @@ -69,6 +71,9 @@ typedef struct AioContext { /* Thread pool for performing work and receiving completion callbacks */ struct ThreadPool *thread_pool; + + /* TimerList for calling timers */ + QEMUTimerList *tl; } AioContext; /* Returns 1 if there are still outstanding AIO requests; 0 otherwise */ diff --git a/tests/test-aio.c b/tests/test-aio.c index c173870..2d7ec4c 100644 --- a/tests/test-aio.c +++ b/tests/test-aio.c @@ -12,6 +12,7 @@ #include #include "block/aio.h" +#include "qemu/timer.h" AioContext *ctx; @@ -628,6 +629,8 @@ int main(int argc, char **argv) { GSource *src; + init_clocks(); + ctx = aio_context_new(); src = aio_get_g_source(ctx); g_source_attach(src, NULL); diff --git a/tests/test-thread-pool.c b/tests/test-thread-pool.c index b62338f..27d6190 100644 --- a/tests/test-thread-pool.c +++ b/tests/test-thread-pool.c @@ -3,6 +3,7 @@ #include "block/aio.h" #include "block/thread-pool.h" #include "block/block.h" +#include "qemu/timer.h" static AioContext *ctx; static ThreadPool *pool; @@ -205,6 +206,8 @@ int main(int argc, char **argv) { int ret; + init_clocks(); + ctx = aio_context_new(); pool = aio_get_thread_pool(ctx); -- 1.7.9.5