|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 15/15] libxl: New event generation API
On Tue, 13 Dec 2011, Ian Campbell wrote:
> On Mon, 2011-12-12 at 19:24 +0000, Stefano Stabellini wrote:
> > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> > index cd613f7..94bdbba 100644
> > --- a/tools/libxl/libxl.c
> > +++ b/tools/libxl/libxl.c
> > @@ -63,6 +63,12 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version,
> > * only as an initialiser, not as an expression. */
> > memcpy(&ctx->lock, &mutex_value, sizeof(ctx->lock));
> >
> > + if(pthread_key_create(&ctx->tls_key, NULL) < 0) {
> > + LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, errno,
> > + "cannot create tls key");
> > + return ERROR_FAIL;
>
> You need a corresponding pthread_key_delete in the free function.
good point
> > [...]
>
> > @@ -65,17 +66,41 @@ int libxl__ptr_add(libxl__gc *gc, void *ptr)
> > return 0;
> > }
> >
> > +libxl__gc *libxl__init_gc(libxl_ctx *ctx)
> > +{
> > + libxl__gc *gc = (libxl__gc *) pthread_getspecific(ctx->tls_key);
> > + if (gc == NULL) {
> > + gc = (libxl__gc *) malloc(sizeof(libxl__gc));
> > + if (gc == NULL)
> > + return NULL;
> > + gc->alloc_maxsize = 0;
> > + gc->alloc_ptrs = 0;
> > + gc->owner = ctx;
> > + gc->nested = 1;
> > + pthread_setspecific(ctx->tls_key, gc);
>
> pthread_setspecific can fail.
right, I'll handle that
> > [...]
>
> > void libxl__free_all(libxl__gc *gc)
> > {
> > void *ptr;
> > int i;
> >
> > + gc->nested--;
> > + if (gc->nested > 0)
> > + return;
> > +
> > for (i = 0; i < gc->alloc_maxsize; i++) {
> > ptr = gc->alloc_ptrs[i];
> > gc->alloc_ptrs[i] = NULL;
> > free(ptr);
> > }
> > free(gc->alloc_ptrs);
> > + pthread_setspecific(CTX->tls_key, NULL);
>
> As above this can also fail. I think this one might be a bit harder to
> deal with in general.
this pthread_setspecific call, with the NULL paramter, can only fail if
the key is invalid, so I think that we don't need to handle that error.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |