RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 24-Mar-2009 21:13:16 Branch: HEAD Handle: 2009032420131500 Modified files: rpm CHANGES rpm/rpmio rpmio.c rpmmg.c rpmmg.h Log: - jbj: yarn: convert rpmmg refcount to usage mutex with refcounts. Summary: Revision Changes Path 1.2870 +1 -0 rpm/CHANGES 1.173 +2 -0 rpm/rpmio/rpmio.c 2.9 +26 -15 rpm/rpmio/rpmmg.c 2.5 +28 -3 rpm/rpmio/rpmmg.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2869 -r1.2870 CHANGES --- rpm/CHANGES 24 Mar 2009 19:30:21 -0000 1.2869 +++ rpm/CHANGES 24 Mar 2009 20:13:15 -0000 1.2870 @@ -1,5 +1,6 @@ 5.2a3 -> 5.2a4: + - jbj: yarn: convert rpmmg refcount to usage mutex with refcounts. - jbj: yarn: convert rpmwf refcount to usage mutex. - jbj: rpmdb: don't bother with the silly structure assignment initialize. - jbj: yarn: wire up rpmdsFini, mark rpmdsFree for destruction. @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmio.c ============================================================================ $ cvs diff -u -r1.172 -r1.173 rpmio.c --- rpm/rpmio/rpmio.c 21 Mar 2009 15:25:12 -0000 1.172 +++ rpm/rpmio/rpmio.c 24 Mar 2009 20:13:15 -0000 1.173 @@ -3112,6 +3112,7 @@ extern rpmioPool _digPool; extern rpmioPool _xarPool; extern rpmioPool _urlPool; + extern rpmioPool _rpmmgPool; #if defined(WITH_LUA) (void) rpmluaFree(NULL); @@ -3127,6 +3128,7 @@ #endif urlFreeCache(); + _rpmmgPool = rpmioFreePool(_rpmmgPool); _digPool = rpmioFreePool(_digPool); _xarPool = rpmioFreePool(_xarPool); _urlPool = rpmioFreePool(_urlPool); @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmmg.c ============================================================================ $ cvs diff -u -r2.8 -r2.9 rpmmg.c --- rpm/rpmio/rpmmg.c 31 Jul 2008 16:58:58 -0000 2.8 +++ rpm/rpmio/rpmmg.c 24 Mar 2009 20:13:15 -0000 2.9 @@ -9,6 +9,7 @@ #endif #include <rpmiotypes.h> +#include <rpmio.h> /* for *Pool methods */ #include <rpmlog.h> #define _RPMMG_INTERNAL #include <rpmmg.h> @@ -18,26 +19,38 @@ /*...@unchecked@*/ int _rpmmg_debug = 0; -rpmmg rpmmgFree(rpmmg mg) +static void rpmmgFini(void * _mg) { -if (_rpmmg_debug) -fprintf(stderr, "--> rpmmgFree(%p)\n", mg); - if (mg) { + rpmmg mg = _mg; + #if defined(HAVE_MAGIC_H) - if (mg->ms) { - magic_close(mg->ms); - mg->ms = NULL; - } + if (mg->ms) { + magic_close(mg->ms); + mg->ms = NULL; + } #endif - mg->fn = _free(mg->fn); - mg = _free(mg); + mg->fn = _free(mg->fn); +} + +/*...@unchecked@*/ /*...@null@*/ +rpmioPool _rpmmgPool; + +static rpmmg rpmmgGetPool(/*...@null@*/ rpmioPool pool) + /*...@modifies pool @*/ +{ + rpmmg mg; + + if (_rpmmgPool == NULL) { + _rpmmgPool = rpmioNewPool("mg", sizeof(*mg), -1, _rpmmg_debug, + NULL, NULL, rpmmgFini); + pool = _rpmmgPool; } - return NULL; + return (rpmmg) rpmioGetPool(pool, sizeof(*mg)); } rpmmg rpmmgNew(const char * fn, int flags) { - rpmmg mg = xcalloc(1, sizeof(*mg)); + rpmmg mg = rpmmgGetPool(_rpmmgPool); int xx; if (fn) @@ -58,9 +71,7 @@ } #endif -if (_rpmmg_debug) -fprintf(stderr, "--> rpmmgNew(%s, 0x%x) mg %p\n", (fn ? fn : "(nil)"), flags, mg); - return mg; + return rpmmgLink(mg); } const char * rpmmgFile(rpmmg mg, const char *fn) @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmmg.h ============================================================================ $ cvs diff -u -r2.4 -r2.5 rpmmg.h --- rpm/rpmio/rpmmg.h 11 Dec 2008 21:55:14 -0000 2.4 +++ rpm/rpmio/rpmmg.h 24 Mar 2009 20:13:15 -0000 2.5 @@ -13,12 +13,13 @@ /** \ingroup rpmio */ -typedef struct rpmmg_s * rpmmg; +typedef /*...@refcounted@*/ struct rpmmg_s * rpmmg; #if defined(_RPMMG_INTERNAL) /** \ingroup rpmio */ struct rpmmg_s { + struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */ const char * fn; int flags; /*...@relnull@*/ @@ -31,14 +32,38 @@ #endif /** + * Unreference a magic wrapper instance. + * @param mg magic wrapper + * @return + */ +/*...@unused@*/ /*...@null@*/ +rpmmg rpmmgUnlink (/*...@killref@*/ /*...@only@*/ /*...@null@*/ rpmmg mg) + /*...@modifies mg @*/; +#define rpmmgUnlink(_ds) \ + ((rpmmg)rpmioUnlinkPoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Reference a magic wrapper instance. + * @param mg magic wrapper + * @return new magic wrapper reference + */ +/*...@unused@*/ /*...@newref@*/ /*...@null@*/ +rpmmg rpmmgLink (/*...@null@*/ rpmmg mg) + /*...@modifies mg @*/; +#define rpmmgLink(_mg) \ + ((rpmmg)rpmioLinkPoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, __LINE__)) + +/** * Destroy a magic wrapper. * @param mg magic wrapper * @return NULL always */ /*...@null@*/ -rpmmg rpmmgFree(/*...@only@*/ /*...@null@*/rpmmg mg) +rpmmg rpmmgFree(/*...@killref@*/ /*...@null@*/rpmmg mg) /*...@globals fileSystem @*/ /*...@modifies mg, fileSystem @*/; +#define rpmmgFree(_mg) \ + ((rpmmg)rpmioFreePoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, __LINE__)) /** * Create and load a magic wrapper. @@ -46,7 +71,7 @@ * @param flags magic flags * @return new magic wrapper */ -/*...@only@*/ /*...@null@*/ +/*...@newref@*/ /*...@null@*/ rpmmg rpmmgNew(const char * fn, int flags) /*...@globals fileSystem, internalState @*/ /*...@modifies fileSystem, internalState @*/; @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org