[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxc: free thread specific hypercall buffer on xc_interface_close
This patch prevents me from starting a guest until the outstanding issue - namely why is hcall_buf_prep() never called - is solved. Christoph On Wednesday 18 August 2010 17:01:07 Ian Campbell wrote: > # HG changeset patch > # User Ian Campbell <ian.campbell@xxxxxxxxxx> > # Date 1282143629 -3600 > # Node ID b1f4b4be1f94c0007794f86abd019f5c2629c59b > # Parent ddbd38da07397dca4760fb687551c3f6f9134700 > libxc: free thread specific hypercall buffer on xc_interface_close > > The per-thread hypercall buffer is usually cleaned up on pthread_exit > by the destructor passed to pthread_key_create. However if the calling > application is not threaded then the destructor is never called. > > This frees the data for the current thread only but that is OK since > any other threads will be cleaned up by the destructor. > > Changed since v1: > * Ensure hcall_buf_pkey is initialised before use. Thanks to > Christoph Egger for his help diagnosing this issue on NetBSD. > * Remove redundant if (hcall_buf) from xc_clean_hcall_buf since > _xc_clean_hcall_buf includes the same check. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > diff -r ddbd38da0739 -r b1f4b4be1f94 tools/libxc/xc_private.c > --- a/tools/libxc/xc_private.c Wed Aug 18 13:14:57 2010 +0100 > +++ b/tools/libxc/xc_private.c Wed Aug 18 16:00:29 2010 +0100 > @@ -57,6 +57,8 @@ xc_interface *xc_interface_open(xentooll > return 0; > } > > +static void xc_clean_hcall_buf(void); > + > int xc_interface_close(xc_interface *xch) > { > int rc = 0; > @@ -68,6 +70,9 @@ int xc_interface_close(xc_interface *xch > rc = xc_interface_close_core(xch, xch->fd); > if (rc) PERROR("Could not close hypervisor interface"); > } > + > + xc_clean_hcall_buf(); > + > free(xch); > return rc; > } > @@ -180,6 +185,8 @@ int hcall_buf_prep(void **addr, size_t l > int hcall_buf_prep(void **addr, size_t len) { return 0; } > void hcall_buf_release(void **addr, size_t len) { } > > +static void xc_clean_hcall_buf(void) { } > + > #else /* !__sun__ */ > > int lock_pages(void *addr, size_t len) > @@ -228,6 +235,13 @@ static void _xc_init_hcall_buf(void) > static void _xc_init_hcall_buf(void) > { > pthread_key_create(&hcall_buf_pkey, _xc_clean_hcall_buf); > +} > + > +static void xc_clean_hcall_buf(void) > +{ > + pthread_once(&hcall_buf_pkey_once, _xc_init_hcall_buf); > + > + _xc_clean_hcall_buf(pthread_getspecific(hcall_buf_pkey)); > } > > int hcall_buf_prep(void **addr, size_t len) > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |