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: 25-Mar-2009 14:38:42 Branch: HEAD Handle: 2009032513384101 Modified files: rpm CHANGES rpm/lib librpm.vers poptALL.c rpmfc.c rpmfc.h Log: - yarn: convert rpmfc to usage mutex with refcounts. Summary: Revision Changes Path 1.2872 +1 -0 rpm/CHANGES 1.66 +0 -1 rpm/lib/librpm.vers 2.117 +3 -0 rpm/lib/poptALL.c 1.61 +46 -32 rpm/lib/rpmfc.c 1.17 +43 -20 rpm/lib/rpmfc.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2871 -r1.2872 CHANGES --- rpm/CHANGES 24 Mar 2009 20:57:54 -0000 1.2871 +++ rpm/CHANGES 25 Mar 2009 13:38:41 -0000 1.2872 @@ -1,5 +1,6 @@ 5.2a3 -> 5.2a4: + - jbj: yarn: convert rpmfc to usage mutex with refcounts. - jbj: yarn: convert hashTable to usage mutex with refcounts. - jbj: yarn: convert rpmmg to usage mutex with refcounts. - jbj: yarn: convert rpmwf refcount to usage mutex. @@ . patch -p0 <<'@@ .' Index: rpm/lib/librpm.vers ============================================================================ $ cvs diff -u -r1.65 -r1.66 librpm.vers --- rpm/lib/librpm.vers 21 Mar 2009 21:53:40 -0000 1.65 +++ rpm/lib/librpm.vers 25 Mar 2009 13:38:42 -0000 1.66 @@ -138,7 +138,6 @@ rpmfcClassify; rpmfcColoring; rpmfcExec; - rpmfcFree; rpmfcGenerateDepends; rpmfcNew; rpmfcPrint; @@ . patch -p0 <<'@@ .' Index: rpm/lib/poptALL.c ============================================================================ $ cvs diff -u -r2.116 -r2.117 poptALL.c --- rpm/lib/poptALL.c 24 Mar 2009 19:30:22 -0000 2.116 +++ rpm/lib/poptALL.c 25 Mar 2009 13:38:42 -0000 2.117 @@ -98,6 +98,8 @@ /* XXX avoid -lrpmbuild linkage. */ /*...@unchecked@*/ int _rpmfc_debug; +/*...@unchecked@*/ +extern rpmioPool _rpmfcPool; /*...@unchecked@*/ extern int _rpmfi_debug; @@ -480,6 +482,7 @@ _rpmtePool = rpmioFreePool(_rpmtePool); _rpmpsPool = rpmioFreePool(_rpmpsPool); + _rpmfcPool = rpmioFreePool(_rpmfcPool); _rpmsxPool = rpmioFreePool(_rpmsxPool); _rpmdsPool = rpmioFreePool(_rpmdsPool); _rpmfiPool = rpmioFreePool(_rpmfiPool); @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfc.c ============================================================================ $ cvs diff -u -r1.60 -r1.61 rpmfc.c --- rpm/lib/rpmfc.c 19 Jan 2009 16:58:59 -0000 1.60 +++ rpm/lib/rpmfc.c 25 Mar 2009 13:38:42 -0000 1.61 @@ -720,38 +720,6 @@ } } } - -rpmfc rpmfcFree(rpmfc fc) -{ - if (fc) { - fc->fn = argvFree(fc->fn); - fc->fcolor = argiFree(fc->fcolor); - fc->fcdictx = argiFree(fc->fcdictx); - fc->fddictx = argiFree(fc->fddictx); - fc->fddictn = argiFree(fc->fddictn); - fc->cdict = argvFree(fc->cdict); - fc->ddict = argvFree(fc->ddict); - fc->ddictx = argiFree(fc->ddictx); - - fc->provides = rpmdsFree(fc->provides); - fc->requires = rpmdsFree(fc->requires); - - fc->iob_java = rpmiobFree(fc->iob_java); - fc->iob_perl = rpmiobFree(fc->iob_perl); - fc->iob_python = rpmiobFree(fc->iob_python); - fc->iob_php = rpmiobFree(fc->iob_php); - - } - fc = _free(fc); - return NULL; -} - -rpmfc rpmfcNew(void) -{ - rpmfc fc = xcalloc(1, sizeof(*fc)); - return fc; -} - /** * Extract script dependencies. * @param fc file classifier @@ -1828,3 +1796,49 @@ return rc; } + +static void rpmfcFini(void *_fc) + /*...@modifies *_fc @*/ +{ + rpmfc fc = _fc; + + fc->fn = argvFree(fc->fn); + fc->fcolor = argiFree(fc->fcolor); + fc->fcdictx = argiFree(fc->fcdictx); + fc->fddictx = argiFree(fc->fddictx); + fc->fddictn = argiFree(fc->fddictn); + fc->cdict = argvFree(fc->cdict); + fc->ddict = argvFree(fc->ddict); + fc->ddictx = argiFree(fc->ddictx); + + fc->provides = rpmdsFree(fc->provides); + fc->requires = rpmdsFree(fc->requires); + + fc->iob_java = rpmiobFree(fc->iob_java); + fc->iob_perl = rpmiobFree(fc->iob_perl); + fc->iob_python = rpmiobFree(fc->iob_python); + fc->iob_php = rpmiobFree(fc->iob_php); +} + +/*...@unchecked@*/ /*...@null@*/ +rpmioPool _rpmfcPool; + +static rpmfc rpmfcGetPool(/*...@null@*/ rpmioPool pool) + /*...@modifies pool @*/ +{ + rpmfc fc; + + if (_rpmfcPool == NULL) { + _rpmfcPool = rpmioNewPool("fc", sizeof(*fc), -1, _rpmfc_debug, + NULL, NULL, rpmfcFini); + pool = _rpmfcPool; + } + return (rpmfc) rpmioGetPool(pool, sizeof(*fc)); +} + +rpmfc rpmfcNew(void) +{ + rpmfc fc = rpmfcGetPool(_rpmfcPool); + return rpmfcLink(fc); +} + @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfc.h ============================================================================ $ cvs diff -u -r1.16 -r1.17 rpmfc.h --- rpm/lib/rpmfc.h 19 Jan 2009 16:58:59 -0000 1.16 +++ rpm/lib/rpmfc.h 25 Mar 2009 13:38:42 -0000 1.17 @@ -70,6 +70,7 @@ /** */ struct rpmfc_s { + struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */ size_t nfiles; /*!< no. of files */ size_t fknown; /*!< no. of classified files */ size_t fwhite; /*!< no. of "white" files */ @@ -164,26 +165,6 @@ /*...@=exportlocal@*/ /** - * Destroy a file classifier. - * @param fc file classifier - * @return NULL always - */ -/*...@-exportlocal@*/ -/*...@null@*/ -rpmfc rpmfcFree(/*...@only@*/ /*...@null@*/ rpmfc fc) - /*...@modifies fc @*/; -/*...@=exportlocal@*/ - -/** - * Create a file classifier. - * @return new file classifier - */ -/*...@-exportlocal@*/ -rpmfc rpmfcNew(void) - /*...@*/; -/*...@=exportlocal@*/ - -/** * Build file class dictionary and mappings. * @param fc file classifier * @param argv files to classify @@ -217,6 +198,48 @@ /*...@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ /*...@modifies rpmGlobalMacroContext, fileSystem, internalState @*/; +/** + * Unreference a file classifier instance. + * @param ds dependency set + * @return NULL if free'd + */ +/*...@unused@*/ /*...@null@*/ +rpmfc rpmfcUnlink (/*...@killref@*/ /*...@only@*/ /*...@null@*/ rpmfc fc) + /*...@modifies fc @*/; +#define rpmfcUnlink(_fc) \ + ((rpmfc)rpmioUnlinkPoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Reference a file classifier instance. + * @param ds file classifier + * @return new file classifier reference + */ +/*...@unused@*/ /*...@newref@*/ /*...@null@*/ +rpmfc rpmfcLink (/*...@null@*/ rpmfc fc) + /*...@modifies ds @*/; +#define rpmfcLink(_fc) \ + ((rpmfc)rpmioLinkPoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Destroy a file classifier. + * @param fc file classifier + * @return NULL if free'd + */ +/*...@null@*/ +rpmfc rpmfcFree(/*...@only@*/ /*...@null@*/ rpmfc fc) + /*...@modifies fc @*/; +#define rpmfcFree(_fc) \ + ((rpmfc)rpmioFreePoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Create a file classifier. + * @return new file classifier + */ +/*...@-exportlocal@*/ +rpmfc rpmfcNew(void) + /*...@*/; +/*...@=exportlocal@*/ + #ifdef __cplusplus } #endif @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org