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 21:13:16
  Branch: HEAD                             Handle: 2009032420131500

  Modified files:
    rpm                     CHANGES
    rpm/rpmio               rpmio.c rpmmg.c rpmmg.h

  Log:
    - jbj: yarn: convert rpmmg refcount to usage mutex with refcounts.

  Summary:
    Revision    Changes     Path
    1.2870      +1  -0      rpm/CHANGES
    1.173       +2  -0      rpm/rpmio/rpmio.c
    2.9         +26 -15     rpm/rpmio/rpmmg.c
    2.5         +28 -3      rpm/rpmio/rpmmg.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2869 -r1.2870 CHANGES
  --- rpm/CHANGES       24 Mar 2009 19:30:21 -0000      1.2869
  +++ rpm/CHANGES       24 Mar 2009 20:13:15 -0000      1.2870
  @@ -1,5 +1,6 @@
   
   5.2a3 -> 5.2a4:
  +    - jbj: yarn: convert rpmmg refcount to usage mutex with refcounts.
       - jbj: yarn: convert rpmwf refcount to usage mutex.
       - jbj: rpmdb: don't bother with the silly structure assignment 
initialize.
       - jbj: yarn: wire up rpmdsFini, mark rpmdsFree for destruction.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.172 -r1.173 rpmio.c
  --- rpm/rpmio/rpmio.c 21 Mar 2009 15:25:12 -0000      1.172
  +++ rpm/rpmio/rpmio.c 24 Mar 2009 20:13:15 -0000      1.173
  @@ -3112,6 +3112,7 @@
       extern rpmioPool _digPool;
       extern rpmioPool _xarPool;
       extern rpmioPool _urlPool;
  +    extern rpmioPool _rpmmgPool;
   
   #if defined(WITH_LUA)
       (void) rpmluaFree(NULL);
  @@ -3127,6 +3128,7 @@
   #endif
       urlFreeCache();
   
  +    _rpmmgPool = rpmioFreePool(_rpmmgPool);
       _digPool = rpmioFreePool(_digPool);
       _xarPool = rpmioFreePool(_xarPool);
       _urlPool = rpmioFreePool(_urlPool);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmmg.c
  ============================================================================
  $ cvs diff -u -r2.8 -r2.9 rpmmg.c
  --- rpm/rpmio/rpmmg.c 31 Jul 2008 16:58:58 -0000      2.8
  +++ rpm/rpmio/rpmmg.c 24 Mar 2009 20:13:15 -0000      2.9
  @@ -9,6 +9,7 @@
   #endif
   
   #include <rpmiotypes.h>
  +#include <rpmio.h>   /* for *Pool methods */
   #include <rpmlog.h>
   #define      _RPMMG_INTERNAL
   #include <rpmmg.h>
  @@ -18,26 +19,38 @@
   /*...@unchecked@*/
   int _rpmmg_debug = 0;
   
  -rpmmg rpmmgFree(rpmmg mg)
  +static void rpmmgFini(void * _mg)
   {
  -if (_rpmmg_debug)
  -fprintf(stderr, "--> rpmmgFree(%p)\n", mg);
  -    if (mg) {
  +    rpmmg mg = _mg;
  +
   #if defined(HAVE_MAGIC_H)
  -     if (mg->ms) {
  -         magic_close(mg->ms);
  -         mg->ms = NULL;
  -     }
  +    if (mg->ms) {
  +     magic_close(mg->ms);
  +     mg->ms = NULL;
  +    }
   #endif
  -     mg->fn = _free(mg->fn);
  -     mg = _free(mg);
  +    mg->fn = _free(mg->fn);
  +}
  +
  +/*...@unchecked@*/ /*...@null@*/
  +rpmioPool _rpmmgPool;
  +
  +static rpmmg rpmmgGetPool(/*...@null@*/ rpmioPool pool)
  +     /*...@modifies pool @*/
  +{
  +    rpmmg mg;
  +
  +    if (_rpmmgPool == NULL) {
  +     _rpmmgPool = rpmioNewPool("mg", sizeof(*mg), -1, _rpmmg_debug,
  +                     NULL, NULL, rpmmgFini);
  +     pool = _rpmmgPool;
       }
  -    return NULL;
  +    return (rpmmg) rpmioGetPool(pool, sizeof(*mg));
   }
   
   rpmmg rpmmgNew(const char * fn, int flags)
   {
  -    rpmmg mg = xcalloc(1, sizeof(*mg));
  +    rpmmg mg = rpmmgGetPool(_rpmmgPool);
       int xx;
   
       if (fn)
  @@ -58,9 +71,7 @@
       }
   #endif
   
  -if (_rpmmg_debug)
  -fprintf(stderr, "--> rpmmgNew(%s, 0x%x) mg %p\n", (fn ? fn : "(nil)"), 
flags, mg);
  -    return mg;
  +    return rpmmgLink(mg);
   }
   
   const char * rpmmgFile(rpmmg mg, const char *fn)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmmg.h
  ============================================================================
  $ cvs diff -u -r2.4 -r2.5 rpmmg.h
  --- rpm/rpmio/rpmmg.h 11 Dec 2008 21:55:14 -0000      2.4
  +++ rpm/rpmio/rpmmg.h 24 Mar 2009 20:13:15 -0000      2.5
  @@ -13,12 +13,13 @@
   
   /** \ingroup rpmio
    */
  -typedef struct rpmmg_s * rpmmg;
  +typedef /*...@refcounted@*/ struct rpmmg_s * rpmmg;
   
   #if defined(_RPMMG_INTERNAL)
   /** \ingroup rpmio
    */
   struct rpmmg_s {
  +    struct rpmioItem_s _item;        /*!< usage mutex and pool identifier. */
       const char * fn;
       int flags;
   /*...@relnull@*/
  @@ -31,14 +32,38 @@
   #endif
   
   /**
  + * Unreference a magic wrapper instance.
  + * @param mg         magic wrapper
  + * @return
  + */
  +/*...@unused@*/ /*...@null@*/
  +rpmmg rpmmgUnlink (/*...@killref@*/ /*...@only@*/ /*...@null@*/ rpmmg mg)
  +     /*...@modifies mg @*/;
  +#define      rpmmgUnlink(_ds)        \
  +    ((rpmmg)rpmioUnlinkPoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Reference a magic wrapper instance.
  + * @param mg         magic wrapper
  + * @return           new magic wrapper reference
  + */
  +/*...@unused@*/ /*...@newref@*/ /*...@null@*/
  +rpmmg rpmmgLink (/*...@null@*/ rpmmg mg)
  +     /*...@modifies mg @*/;
  +#define      rpmmgLink(_mg)  \
  +    ((rpmmg)rpmioLinkPoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
    * Destroy a magic wrapper.
    * @param mg         magic wrapper
    * @return           NULL always
    */
   /*...@null@*/
  -rpmmg rpmmgFree(/*...@only@*/ /*...@null@*/rpmmg mg)
  +rpmmg rpmmgFree(/*...@killref@*/ /*...@null@*/rpmmg mg)
        /*...@globals fileSystem @*/
        /*...@modifies mg, fileSystem @*/;
  +#define      rpmmgFree(_mg)  \
  +    ((rpmmg)rpmioFreePoolItem((rpmioItem)(_mg), __FUNCTION__, __FILE__, 
__LINE__))
   
   /**
    * Create and load a magic wrapper.
  @@ -46,7 +71,7 @@
    * @param flags              magic flags
    * @return           new magic wrapper
    */
  -/*...@only@*/ /*...@null@*/
  +/*...@newref@*/ /*...@null@*/
   rpmmg rpmmgNew(const char * fn, int flags)
        /*...@globals fileSystem, internalState @*/
        /*...@modifies fileSystem, internalState @*/;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to