[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxc: free thread specific hypercall buffer on xc_interface_close
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1280503248 -3600 # Node ID 6a0dd2c29999caba75717c7a2472096e34149a0b # Parent 9f49667fec7197c935c822f7caea64b98007c605 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. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxc/xc_private.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+) diff -r 9f49667fec71 -r 6a0dd2c29999 tools/libxc/xc_private.c --- a/tools/libxc/xc_private.c Fri Jul 30 15:22:39 2010 +0100 +++ b/tools/libxc/xc_private.c Fri Jul 30 16:20:48 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) @@ -223,6 +230,14 @@ static void _xc_clean_hcall_buf(void *m) } pthread_setspecific(hcall_buf_pkey, NULL); +} + +static void xc_clean_hcall_buf(void) +{ + void *hcall_buf = pthread_getspecific(hcall_buf_pkey); + + if (hcall_buf) + _xc_clean_hcall_buf(hcall_buf); } static void _xc_init_hcall_buf(void) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |