From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: [PATCH] libxl: make libxl__poller_put tolerate p==NULL libxl_event_wait Date: Fri, 11 Oct 2013 12:12:51 +0100 Message-ID: <21079.56627.513787.948179@mariner.uk.xensource.com> References: <52399CA2.8080504@citrix.com> <1380432276-16016-1-git-send-email-mattjd@gmail.com> <1380807569.25618.0.camel@kazak.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1380807569.25618.0.camel@kazak.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: Andrew Cooper , Matthew Daley , Stefano Stabellini , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org Ian Campbell writes ("Re: [PATCH v2] libxl: only put poller if already gotten in libxl_event_wait"): > On Sun, 2013-09-29 at 18:24 +1300, Matthew Daley wrote: > > Coverity-ID: 1055292 > > Signed-off-by: Matthew Daley > > Acked + applied, thanks. commit 9134bb273db4d55bec247d751b1de6e7876a7fe7 Author: Ian Jackson Date: Fri Oct 11 12:10:45 2013 +0100 libxl: make libxl__poller_put tolerate p==NULL This is less fragile, and more in keeping with the usual style of initialising everything to 0 and freeing things unconditionally. Correspondingly, remove the tests at the call sites. Apropos of c1f3f174. No overall functional change. Signed-off-by: Ian Jackson diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index 6f033dd..a5c52bc 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -1347,6 +1347,7 @@ libxl__poller *libxl__poller_get(libxl_ctx *ctx) void libxl__poller_put(libxl_ctx *ctx, libxl__poller *p) { + if (!p) return; LIBXL_LIST_INSERT_HEAD(&ctx->pollers_idle, p, entry); } @@ -1476,8 +1477,7 @@ int libxl_event_wait(libxl_ctx *ctx, libxl_event **event_r, } out: - if (poller) - libxl__poller_put(ctx, poller); + libxl__poller_put(ctx, poller); CTX_UNLOCK; EGC_FREE; @@ -1540,7 +1540,7 @@ void libxl__ao__destroy(libxl_ctx *ctx, libxl__ao *ao) AO_GC; if (!ao) return; LOG(DEBUG,"ao %p: destroy",ao); - if (ao->poller) libxl__poller_put(ctx, ao->poller); + libxl__poller_put(ctx, ao->poller); ao->magic = LIBXL__AO_MAGIC_DESTROYED; libxl__free_all(&ao->gc); free(ao); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 4e15055..165dc00 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -829,7 +829,7 @@ _hidden void libxl__poller_dispose(libxl__poller *p); * away again afterwards. _get can fail, returning NULL. * ctx must be locked. */ _hidden libxl__poller *libxl__poller_get(libxl_ctx *ctx); -_hidden void libxl__poller_put(libxl_ctx *ctx, libxl__poller *p); +_hidden void libxl__poller_put(libxl_ctx*, libxl__poller *p /* may be NULL */); /* Notifies whoever is polling using p that they should wake up. * ctx must be locked. */