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 16:17:13
  Branch: HEAD                             Handle: 2009032415171201

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               header.c librpmdb.vers rpmtag.h

  Log:
    - yarn: wire up headerScrub, eliminate header{Link,Unlink}.

  Summary:
    Revision    Changes     Path
    1.2864      +1  -0      rpm/CHANGES
    1.175       +55 -83     rpm/rpmdb/header.c
    1.59        +0  -2      rpm/rpmdb/librpmdb.vers
    1.58        +8  -0      rpm/rpmdb/rpmtag.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2863 -r1.2864 CHANGES
  --- rpm/CHANGES       23 Mar 2009 17:25:21 -0000      1.2863
  +++ rpm/CHANGES       24 Mar 2009 15:17:12 -0000      1.2864
  @@ -1,5 +1,6 @@
   
   5.2a3 -> 5.2a4:
  +    - jbj: yarn: wire up headerScrub, eliminate header{Link,Unlink}.
       - devzero2000: fix: add autofu AC_CPP_FUNC portability macro in the 
acinclude.m4
       - devzero2000: add autofu AC_CPP_FUNC portability macro
       - jbj: yarn: wire up rpmteFini, eliminate rpmteFree.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.174 -r1.175 header.c
  --- rpm/rpmdb/header.c        20 Mar 2009 18:28:34 -0000      1.174
  +++ rpm/rpmdb/header.c        24 Mar 2009 15:17:13 -0000      1.175
  @@ -91,23 +91,6 @@
   rpmop _hdr_getops = &hdr_getops;
   /*...@=compmempass@*/
   
  -
  -/*...@unchecked@*/ /*...@null@*/
  -rpmioPool _headerPool;
  -
  -static Header headerGetPool(/*...@null@*/ rpmioPool pool)
  -     /*...@modifies pool @*/
  -{
  -    Header h;
  -
  -    if (_headerPool == NULL) {
  -     _headerPool = rpmioNewPool("h", sizeof(*h), -1, _hdr_debug,
  -                     NULL, NULL, NULL);
  -     pool = _headerPool;
  -    }
  -    return (Header) rpmioGetPool(pool, sizeof(*h));
  -}
  -
   void * headerGetStats(Header h, int opx)
   {
       rpmop op = NULL;
  @@ -119,83 +102,72 @@
       return op;
   }
   
  -Header headerLink(Header h)
  +static void headerScrub(void * _h)   /* XXX headerFini already in use */
  +     /*...@modifies *_h @*/
   {
  -/*...@-nullret@*/
  -    if (h == NULL) return NULL;
  -/*...@=nullret@*/
  +    Header h = _h;
   
  -    yarnPossess(h->_item.use);
  -/*...@-modfilesys@*/
  -if (_hdr_debug)
  -fprintf(stderr, "--> h  %p ++ %ld at %s:%u\n", h, 
yarnPeekLock(h->_item.use)+1, __FILE__, __LINE__);
  -/*...@=modfilesys@*/
  -    yarnTwist(h->_item.use, BY, 1);
  +    if (h->index != NULL) {
  +     indexEntry entry = h->index;
  +     size_t i;
  +     for (i = 0; i < h->indexUsed; i++, entry++) {
  +         if ((h->flags & HEADERFLAG_ALLOCATED) && ENTRY_IS_REGION(entry)) {
  +             if (entry->length > 0) {
  +                 rpmuint32_t * ei = entry->data;
  +                 if ((ei - 2) == h->blob)
  +                     h->blob = _free(h->blob);
  +                 entry->data = NULL;
  +             }
  +         } else if (!ENTRY_IN_REGION(entry)) {
  +             entry->data = _free(entry->data);
  +         }
  +         entry->data = NULL;
  +     }
  +     h->index = _free(h->index);
  +    }
  +    h->origin = _free(h->origin);
  +    h->baseurl = _free(h->baseurl);
  +    h->digest = _free(h->digest);
   
  -    /*...@-refcounttrans @*/
  -    return h;
  -    /*...@=refcounttrans @*/
  +/*...@-nullstate@*/
  +    if (_hdr_stats) {
  +     if (_hdr_loadops)       /* RPMTS_OP_HDRLOAD */
  +         (void) rpmswAdd(_hdr_loadops, headerGetStats(h, 18));
  +     if (_hdr_getops)        /* RPMTS_OP_HDRGET */
  +         (void) rpmswAdd(_hdr_getops, headerGetStats(h, 19));
  +    }
  +/*...@=nullstate@*/
   }
   
  -Header headerUnlink(Header h)
  +#ifndef      BUGGY
  +Header headerFree(Header h)
   {
  -    if (h == NULL) return NULL;
  -    yarnPossess(h->_item.use);
  -/*...@-modfilesys@*/
  -if (_hdr_debug)
  -fprintf(stderr, "--> h  %p -- %ld at %s:%u\n", h, 
yarnPeekLock(h->_item.use), __FILE__, __LINE__);
  -/*...@=modfilesys@*/
  -    yarnTwist(h->_item.use, BY, -1);
  +    /* XXX There's a h = headerFree(h) somewhere that depends on
  +     * a NULL being returned from headerFree(). Wire up a NULL
  +     * return from rpmioFreePoolItem() in headerFree() for now.
  +     * Note: the code that depends on headerFree() returning NULL
  +     * is on some lazy deallocation teardown path while trying to exit from
  +     * rpm -qavv that is dereferencing a Header more often than necessary.
  +     */
  +    (void) rpmioFreePoolItem((rpmioItem)h, __FUNCTION__, __FILE__, __LINE__);
       return NULL;
   }
  +#endif
   
  -Header headerFree(Header h)
  -{
  -
  -    if (h == NULL)
  -     return NULL;
  +/*...@unchecked@*/ /*...@null@*/
  +rpmioPool _headerPool;
   
  -    yarnPossess(h->_item.use);
  -/*...@-modfilesys@*/
  -if (_hdr_debug)
  -fprintf(stderr, "--> h  %p -- %ld at %s:%u\n", h, 
yarnPeekLock(h->_item.use), __FILE__, __LINE__);
  -/*...@=modfilesys@*/
  -    if (yarnPeekLock(h->_item.use) <= 1L) {
  -     if (h->index != NULL) {
  -         indexEntry entry = h->index;
  -         size_t i;
  -         for (i = 0; i < h->indexUsed; i++, entry++) {
  -             if ((h->flags & HEADERFLAG_ALLOCATED) && ENTRY_IS_REGION(entry))
  -             {
  -                 if (entry->length > 0) {
  -                     rpmuint32_t * ei = entry->data;
  -                     if ((ei - 2) == h->blob)
  -                         h->blob = _free(h->blob);
  -                     entry->data = NULL;
  -                 }
  -             } else if (!ENTRY_IN_REGION(entry)) {
  -                 entry->data = _free(entry->data);
  -             }
  -             entry->data = NULL;
  -         }
  -         h->index = _free(h->index);
  -     }
  -     h->origin = _free(h->origin);
  -     h->baseurl = _free(h->baseurl);
  -     h->digest = _free(h->digest);
  +static Header headerGetPool(/*...@null@*/ rpmioPool pool)
  +     /*...@modifies pool @*/
  +{
  +    Header h;
   
  -/*...@-nullstate@*/
  -     if (_hdr_stats) {
  -         if (_hdr_loadops)   /* RPMTS_OP_HDRLOAD */
  -             (void) rpmswAdd(_hdr_loadops, headerGetStats(h, 18));
  -         if (_hdr_getops)    /* RPMTS_OP_HDRGET */
  -             (void) rpmswAdd(_hdr_getops, headerGetStats(h, 19));
  -     }
  -/*...@=nullstate@*/
  -     h = (Header) rpmioPutPool((rpmioItem)h);
  -    } else
  -     yarnTwist(h->_item.use, BY, -1);
  -    return NULL;
  +    if (_headerPool == NULL) {
  +     _headerPool = rpmioNewPool("h", sizeof(*h), -1, _hdr_debug,
  +                     NULL, NULL, headerScrub);
  +     pool = _headerPool;
  +    }
  +    return (Header) rpmioGetPool(pool, sizeof(*h));
   }
   
   Header headerNew(void)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/librpmdb.vers
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 librpmdb.vers
  --- rpm/rpmdb/librpmdb.vers   20 Mar 2009 14:47:12 -0000      1.58
  +++ rpm/rpmdb/librpmdb.vers   24 Mar 2009 15:17:13 -0000      1.59
  @@ -59,7 +59,6 @@
       headerSetStatbuf;
       headerInit;
       headerIsEntry;
  -    headerLink;
       headerLoad;
       headerMacrosLoad;
       headerMacrosUnload;
  @@ -76,7 +75,6 @@
       headerSetOrigin;
       headerSizeof;
       headerSprintf;
  -    headerUnlink;
       headerUnload;
       headerVerifyInfo;
       hGetColor;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmtag.h
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 rpmtag.h
  --- rpm/rpmdb/rpmtag.h        29 Dec 2008 22:33:33 -0000      1.57
  +++ rpm/rpmdb/rpmtag.h        24 Mar 2009 15:17:13 -0000      1.58
  @@ -811,6 +811,8 @@
    */
   Header headerLink(Header h)
        /*...@modifies h @*/;
  +#define headerLink(_h)        \
  +    ((Header)rpmioLinkPoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, 
__LINE__))
   
   /** \ingroup header
    * Dereference a header instance.
  @@ -820,6 +822,8 @@
   /*...@null@*/
   Header headerUnlink(/*...@killref@*/ /*...@null@*/ Header h)
        /*...@modifies h @*/;
  +#define headerUnlink(_h)        \
  +    ((Header)rpmioUnlinkPoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, 
__LINE__))
   
   /** \ingroup header
    * Dereference a header instance.
  @@ -829,6 +833,10 @@
   /*...@null@*/
   Header headerFree(/*...@killref@*/ /*...@null@*/ Header h)
        /*...@modifies h @*/;
  +#ifdef       NOTYET  /* XXX h = headerFree(h) NULL return needs to be 
found/fixed. */
  +#define headerFree(_h)        \
  +    ((Header)rpmioFreePoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, 
__LINE__))
  +#endif
   
   /** \ingroup header
    * Create new (empty) header instance.
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to