[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-cim] Emailing: libxen.diff
Ewan, It looks like if we can just do these inside _init and _fini (which are functions called when the library is loaded and unloaded respectively), we won't need to wory about MT-safeness. The OS won't unload the shared library till everyone who's linked to it has unloaded. Was there any specific reason why there were specific xen_init and xen_fini calls created? Raj > -----Original Message----- > From: Ewan Mellor [mailto:ewan@xxxxxxxxxxxxx] > Sent: Saturday, December 23, 2006 5:13 AM > To: Subrahmanian, Raj > Cc: xen-cim@xxxxxxxxxxxxxxxxxxx; Jim Fehlig > Subject: Re: [Xen-cim] Emailing: libxen.diff > > On Fri, Dec 22, 2006 at 10:00:49PM -0500, Subrahmanian, Raj wrote: > > > This will MT-safe the xen_init and xen_fini calls, so that > we can do > > it once for each provider than for each call. > > I don't think that this belongs in libxen, as that library > shouldn't add a dependency on libpthread unconditionally. > Can't you do this inside the provider? > > Ewan. > > > Raj > > <<libxen.diff>> > > > diff -r 8348f40ba2b7 tools/libxen/Makefile > > --- a/tools/libxen/Makefile Thu Dec 21 14:49:19 2006 +0000 > > +++ b/tools/libxen/Makefile Fri Dec 22 17:32:26 2006 -0500 > > @@ -27,7 +27,8 @@ CFLAGS = -Iinclude \ > > -W -Wall -Wmissing-prototypes -Werror -std=c99 -O2 -fPIC > > > > LDFLAGS = $(shell xml2-config --libs) \ > - $(shell curl-config --libs) > > + $(shell curl-config --libs) \ > > + -lpthread > > > > LIBXENAPI_HDRS = $(wildcard include/*.h) LIBXENAPI_OBJS = > $(patsubst > > %.c, %.o, $(wildcard src/*.c)) diff -r 8348f40ba2b7 > > tools/libxen/include/xen_common.h > > --- a/tools/libxen/include/xen_common.h Thu Dec 21 > 14:49:19 2006 +0000 > > +++ b/tools/libxen/include/xen_common.h Fri Dec 22 > 17:32:26 2006 -0500 > > @@ -24,13 +24,13 @@ > > #include <stddef.h> > > #include <stdint.h> > > #include <time.h> > > - > > +// The init and the fini really need to happen only once. > > +// The mutex will take care of that > > +#include <pthread.h> > > #include "xen_host_decl.h" > > - > > > > typedef bool (*xen_result_func)(const void *data, size_t len, > > void *result_handle); > > - > > > > /** > > * len does not include a terminating \0. > > diff -r 8348f40ba2b7 tools/libxen/src/xen_common.c > > --- a/tools/libxen/src/xen_common.c Thu Dec 21 14:49:19 2006 +0000 > > +++ b/tools/libxen/src/xen_common.c Fri Dec 22 17:32:26 2006 -0500 > > @@ -43,6 +43,8 @@ > > #define PERMISSIVE 1 > > > > > > +static pthread_mutex_t mutexUserCount=PTHREAD_MUTEX_INITIALIZER; > > +static unsigned UserCount=0; > > static xmlXPathCompExprPtr responsePath = NULL; static > > xmlXPathCompExprPtr faultPath = NULL; > > > > @@ -111,23 +113,35 @@ void > > void > > xen_init(void) > > { > > - responsePath = > > - xmlXPathCompile( > > - BAD_CAST( > > - > "/methodResponse/params/param/value/struct/member/value")); > > - faultPath = > > - xmlXPathCompile( > > - > BAD_CAST("/methodResponse/fault/value/struct/member/value")); > > + pthread_mutex_lock(&mutexUserCount); > > + if (UserCount==0) > > + { > > + responsePath = > > + xmlXPathCompile( > > + BAD_CAST( > > + > "/methodResponse/params/param/value/struct/member/value")); > > + faultPath = > > + xmlXPathCompile( > > + > BAD_CAST("/methodResponse/fault/value/struct/member/value")); > > + } > > + UserCount++; > > + pthread_mutex_unlock(&mutexUserCount); > > } > > > > > > void > > xen_fini(void) > > { > > - xmlXPathFreeCompExpr(responsePath); > > - xmlXPathFreeCompExpr(faultPath); > > - responsePath = NULL; > > - faultPath = NULL; > > + pthread_mutex_lock(&mutexUserCount); > > + UserCount--; > > + if (UserCount==0) > > + { > > + xmlXPathFreeCompExpr(responsePath); > > + xmlXPathFreeCompExpr(faultPath); > > + responsePath = NULL; > > + faultPath = NULL; > > + } > > + pthread_mutex_unlock(&mutexUserCount); > > } > > > _______________________________________________ > > Xen-cim mailing list > > Xen-cim@xxxxxxxxxxxxxxxxxxx > > http://lists.xensource.com/xen-cim > > _______________________________________________ Xen-cim mailing list Xen-cim@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-cim
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |