On Tue, Jun 30, 2015 at 09:19:44PM +0800, Fam Zheng wrote: > diff --git a/async.c b/async.c > index 06971f4..1d70cfd 100644 > --- a/async.c > +++ b/async.c > @@ -290,12 +290,17 @@ AioContext *aio_context_new(Error **errp) > { > int ret; > AioContext *ctx; > + Error *local_err = NULL; > + > ctx = (AioContext *) g_source_new(&aio_source_funcs, sizeof(AioContext)); > + aio_context_setup(ctx, &local_err); > + if (local_err) { > + error_propagate(errp, local_err);
Is there any reason to introduce local_err? errp can be passed directly into aio_context_setup(). > + goto fail; > + } > ret = event_notifier_init(&ctx->notifier, false); > if (ret < 0) { > - g_source_destroy(&ctx->source); > - error_setg_errno(errp, -ret, "Failed to initialize event notifier"); > - return NULL; > + goto fail; > } > g_source_set_can_recurse(&ctx->source, true); > aio_set_event_notifier(ctx, &ctx->notifier, > @@ -307,6 +312,10 @@ AioContext *aio_context_new(Error **errp) > timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx); > > return ctx; > +fail: > + g_source_destroy(&ctx->source); > + error_setg_errno(errp, -ret, "Failed to initialize event notifier"); If aio_context_setup() failed then this hits the *errp == NULL assertion failure in error_setg_errno(). This call shouldn't be moved away from the event_notifier_init() call.
pgpuZQZpimMg3.pgp
Description: PGP signature