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: 17-Mar-2009 15:35:58 Branch: rpm-5_1 Handle: 2009031714355701 Modified files: (Branch: rpm-5_1) rpm CHANGES rpm/lib rpmfi.c rpmfi.h Log: - yarn: convert rpmfi refcounts to usage mutexes. Summary: Revision Changes Path 1.2288.2.201+1 -0 rpm/CHANGES 2.123.2.2 +20 -7 rpm/lib/rpmfi.c 2.54.2.5 +1 -2 rpm/lib/rpmfi.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2288.2.200 -r1.2288.2.201 CHANGES --- rpm/CHANGES 17 Mar 2009 13:46:12 -0000 1.2288.2.200 +++ rpm/CHANGES 17 Mar 2009 14:35:57 -0000 1.2288.2.201 @@ -1,4 +1,5 @@ 5.1.7 -> 5.1.8: + - jbj: yarn: convert rpmfi refcounts to usage mutexes. - jbj: yarn: convert rpmds refcounts to usage mutexes. - jbj: yarn: convert Header refcounts to usage mutexes. - jbj: yarn: convert urlInfo refcounts to usage mutexes. @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfi.c ============================================================================ $ cvs diff -u -r2.123.2.1 -r2.123.2.2 rpmfi.c --- rpm/lib/rpmfi.c 10 Dec 2008 20:48:45 -0000 2.123.2.1 +++ rpm/lib/rpmfi.c 17 Mar 2009 14:35:58 -0000 2.123.2.2 @@ -41,22 +41,24 @@ rpmfi XrpmfiUnlink(rpmfi fi, const char * msg, const char * fn, unsigned ln) { if (fi == NULL) return NULL; + yarnPossess(fi->use); /*...@-modfilesys@*/ if (_rpmfi_debug && msg != NULL) -fprintf(stderr, "--> fi %p -- %d %s at %s:%u\n", fi, fi->nrefs, msg, fn, ln); +fprintf(stderr, "--> fi %p -- %ld %s at %s:%u\n", fi, yarnPeekLock(fi->use), msg, fn, ln); /*...@=modfilesys@*/ - fi->nrefs--; + yarnTwist(fi->use, BY, -1); return NULL; } rpmfi XrpmfiLink(rpmfi fi, const char * msg, const char * fn, unsigned ln) { if (fi == NULL) return NULL; - fi->nrefs++; + yarnPossess(fi->use); /*...@-modfilesys@*/ if (_rpmfi_debug && msg != NULL) -fprintf(stderr, "--> fi %p ++ %d %s at %s:%u\n", fi, fi->nrefs, msg, fn, ln); +fprintf(stderr, "--> fi %p ++ %ld %s at %s:%u\n", fi, yarnPeekLock(fi->use)+1, msg, fn, ln); /*...@=modfilesys@*/ + yarnTwist(fi->use, BY, 1); /*...@-refcounttrans@*/ return fi; /*...@=refcounttrans@*/ } @@ -1201,8 +1203,14 @@ { if (fi == NULL) return NULL; - if (fi->nrefs > 1) - return rpmfiUnlink(fi, fi->Type); + yarnPossess(fi->use); +/*...@-modfilesys@*/ +if (_rpmfi_debug) +fprintf(stderr, "--> fi %p -- %ld %s at %s:%u\n", fi, yarnPeekLock(fi->use), fi->Type, __FILE__, __LINE__); +/*...@=modfilesys@*/ + + if (yarnPeekLock(fi->use) <= 1L) { + yarnLock use = fi->use; /*...@-modfilesys@*/ if (_rpmfi_debug < 0) @@ -1269,10 +1277,13 @@ fi->h = headerFree(fi->h); /*...@-nullstate -refcounttrans -userelea...@*/ - (void) rpmfiUnlink(fi, fi->Type); memset(fi, 0, sizeof(*fi)); /* XXX trash and burn */ fi = _free(fi); /*...@=nullstate =refcounttrans =userelea...@*/ + yarnTwist(use, BY, -1); + use = yarnFreeLock(use); + } else + yarnTwist(fi->use, BY, -1); return NULL; } @@ -1330,6 +1341,7 @@ if (fi == NULL) /* XXX can't happen */ goto exit; + fi->use = yarnNewLock(0); fi->magic = RPMFIMAGIC; fi->Type = Type; fi->i = -1; @@ -1338,6 +1350,7 @@ fi->h = NULL; fi->isSource = (headerIsEntry(h, RPMTAG_SOURCERPM) == 0 && + headerIsEntry(h, RPMTAG_RPMVERSION) != 0 && headerIsEntry(h, RPMTAG_ARCH) != 0); if (fi->fsm == NULL) @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfi.h ============================================================================ $ cvs diff -u -r2.54.2.4 -r2.54.2.5 rpmfi.h --- rpm/lib/rpmfi.h 6 Mar 2009 22:54:13 -0000 2.54.2.4 +++ rpm/lib/rpmfi.h 17 Mar 2009 14:35:58 -0000 2.54.2.5 @@ -106,6 +106,7 @@ * A package filename set. */ struct rpmfi_s { + yarnLock use; /*!< use count -- return to pool when zero */ int i; /*!< Current file index. */ int j; /*!< Current directory index. */ @@ -255,8 +256,6 @@ int magic; #define RPMFIMAGIC 0x09697923 /*=============================*/ - -/*...@refs@*/ int nrefs; /*!< Reference count. */ }; #endif /* _RPMFI_INTERNAL */ @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org