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

Reply via email to