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-May-2009 22:50:54 Branch: HEAD Handle: 2009052420505301 Modified files: rpm CHANGES rpm/lib poptALL.c rpm/rpmdb dbconfig.c Log: - yarn: convert dbiIndex to usage mutex with refcounts. Summary: Revision Changes Path 1.2994 +1 -0 rpm/CHANGES 2.135 +7 -0 rpm/lib/poptALL.c 1.57 +38 -6 rpm/rpmdb/dbconfig.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2993 -r1.2994 CHANGES --- rpm/CHANGES 24 May 2009 19:45:25 -0000 1.2993 +++ rpm/CHANGES 24 May 2009 20:50:53 -0000 1.2994 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 + - jbj: yarn: convert dbiIndex to usage mutex with refcounts. - jbj: yarn: convert Package to usage mutex with refcounts. - jbj: yarn: convert Spec to usage mutex with refcounts. - jbj: yarn: convert DIGEST_CTX to usage mutex with refcounts. @@ . patch -p0 <<'@@ .' Index: rpm/lib/poptALL.c ============================================================================ $ cvs diff -u -r2.134 -r2.135 poptALL.c --- rpm/lib/poptALL.c 20 May 2009 17:50:56 -0000 2.134 +++ rpm/lib/poptALL.c 24 May 2009 20:50:54 -0000 2.135 @@ -56,6 +56,9 @@ extern int _rpmds_nopromote; /*...@unchecked@*/ +extern int _dbi_debug; + +/*...@unchecked@*/ extern int _fps_debug; /*...@unchecked@*/ @@ -455,6 +458,8 @@ N_("Use threads for Package State Machine"), NULL}, { "rpmdbdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmdb_debug, -1, N_("Debug rpmdb DataBase"), NULL}, + { "rpmdbidebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_dbi_debug, -1, + N_("Debug dbiIndex DataBase Index"), NULL}, { "rpmdsdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmds_debug, -1, N_("Debug rpmds Dependency Set"), NULL}, { "rpmfcdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmfc_debug, -1, @@ -497,6 +502,7 @@ extern rpmioPool _rpmrubyPool; extern rpmioPool _headerPool; extern rpmioPool _rpmmiPool; + extern rpmioPool _dbiPool; extern rpmioPool _rpmdbPool; extern rpmioPool _rpmwfPool; extern const char * evr_tuple_order; @@ -536,6 +542,7 @@ _rpmwfPool = rpmioFreePool(_rpmwfPool); _rpmdbPool = rpmioFreePool(_rpmdbPool); + _dbiPool = rpmioFreePool(_dbiPool); _headerPool = rpmioFreePool(_headerPool); /*...@=onlyunqglobaltrans@*/ /*...@=mods@*/ @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/dbconfig.c ============================================================================ $ cvs diff -u -r1.56 -r1.57 dbconfig.c --- rpm/rpmdb/dbconfig.c 11 Dec 2008 23:31:56 -0000 1.56 +++ rpm/rpmdb/dbconfig.c 24 May 2009 20:50:54 -0000 1.57 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <popt.h> #include <rpmlog.h> #include <rpmmacro.h> @@ -17,6 +18,9 @@ /*...@access dbiin...@*/ /*...@access dbiindex...@*/ +/*...@unchecked@*/ +int _dbi_debug; + #if defined(WITH_DB) || defined(WITH_SQLITE) /*...@-exportlocal -exportheader...@*/ @@ -634,6 +638,15 @@ dbiIndex db3Free(dbiIndex dbi) { + if (dbi != NULL) + (void)rpmioFreePoolItem((rpmioItem)dbi, __FUNCTION__, __FILE__, __LINE__); + return NULL; +} + +static void dbiFini(void * _dbi) + /*...@modifies _dbi @*/ +{ + dbiIndex dbi = _dbi; if (dbi) { dbi->dbi_root = _free(dbi->dbi_root); dbi->dbi_home = _free(dbi->dbi_home); @@ -644,9 +657,22 @@ dbi->dbi_errpfx = _free(dbi->dbi_errpfx); dbi->dbi_re_source = _free(dbi->dbi_re_source); dbi->dbi_stats = _free(dbi->dbi_stats); - dbi = _free(dbi); } - return dbi; +} + +/*...@unchecked@*/ /*...@only@*/ /*...@null@*/ +rpmioPool _dbiPool; + +static dbiIndex dbiGetPool(rpmioPool pool) +{ + dbiIndex dbi; + + if (_dbiPool == NULL) { + _dbiPool = rpmioNewPool("dbi", sizeof(*dbi), -1, _dbi_debug, + NULL, NULL, dbiFini); + pool = _dbiPool; + } + return (dbiIndex) rpmioGetPool(pool, sizeof(*dbi)); } /*...@observer@*/ /*...@unchecked@*/ @@ -655,7 +681,7 @@ dbiIndex db3New(rpmdb rpmdb, rpmTag tag) { - dbiIndex dbi = xcalloc(1, sizeof(*dbi)); + dbiIndex dbi = dbiGetPool(_dbiPool); char * dbOpts = rpmExpand("%{_dbi_config_", tagName(tag), "}", NULL); if (!(dbOpts && *dbOpts && *dbOpts != '%')) { @@ -785,9 +811,15 @@ dbOpts = _free(dbOpts); - /*...@-assignexpose@*/ +/*...@-assignexpose@*/ + { void *use = dbi->_item.use; + void *pool = dbi->_item.pool; /*...@i@*/ *dbi = db3dbi; /* structure assignment */ - /*...@=assignexpose@*/ + dbi->_item.use = use; + dbi->_item.pool = pool; + } +/*...@=assignexpose@*/ + memset(&db3dbi, 0, sizeof(db3dbi)); if (!(dbi->dbi_perms & 0600)) @@ -828,7 +860,7 @@ #endif /*...@-globstate@*/ /* FIX: *(rdbOptions->arg) reachable */ - return dbi; + return (dbiIndex)rpmioLinkPoolItem((rpmioItem)dbi, __FUNCTION__, __FILE__, __LINE__); /*...@=globstate@*/ } @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org