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:   25-Mar-2009 14:38:42
  Branch: HEAD                             Handle: 2009032513384101

  Modified files:
    rpm                     CHANGES
    rpm/lib                 librpm.vers poptALL.c rpmfc.c rpmfc.h

  Log:
    - yarn: convert rpmfc to usage mutex with refcounts.

  Summary:
    Revision    Changes     Path
    1.2872      +1  -0      rpm/CHANGES
    1.66        +0  -1      rpm/lib/librpm.vers
    2.117       +3  -0      rpm/lib/poptALL.c
    1.61        +46 -32     rpm/lib/rpmfc.c
    1.17        +43 -20     rpm/lib/rpmfc.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2871 -r1.2872 CHANGES
  --- rpm/CHANGES       24 Mar 2009 20:57:54 -0000      1.2871
  +++ rpm/CHANGES       25 Mar 2009 13:38:41 -0000      1.2872
  @@ -1,5 +1,6 @@
   
   5.2a3 -> 5.2a4:
  +    - jbj: yarn: convert rpmfc to usage mutex with refcounts.
       - jbj: yarn: convert hashTable to usage mutex with refcounts.
       - jbj: yarn: convert rpmmg to usage mutex with refcounts.
       - jbj: yarn: convert rpmwf refcount to usage mutex.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/librpm.vers
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 librpm.vers
  --- rpm/lib/librpm.vers       21 Mar 2009 21:53:40 -0000      1.65
  +++ rpm/lib/librpm.vers       25 Mar 2009 13:38:42 -0000      1.66
  @@ -138,7 +138,6 @@
       rpmfcClassify;
       rpmfcColoring;
       rpmfcExec;
  -    rpmfcFree;
       rpmfcGenerateDepends;
       rpmfcNew;
       rpmfcPrint;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/poptALL.c
  ============================================================================
  $ cvs diff -u -r2.116 -r2.117 poptALL.c
  --- rpm/lib/poptALL.c 24 Mar 2009 19:30:22 -0000      2.116
  +++ rpm/lib/poptALL.c 25 Mar 2009 13:38:42 -0000      2.117
  @@ -98,6 +98,8 @@
   /* XXX avoid -lrpmbuild linkage. */
   /*...@unchecked@*/
          int _rpmfc_debug;
  +/*...@unchecked@*/
  +extern rpmioPool _rpmfcPool;
   
   /*...@unchecked@*/
   extern int _rpmfi_debug;
  @@ -480,6 +482,7 @@
       _rpmtePool = rpmioFreePool(_rpmtePool);
       _rpmpsPool = rpmioFreePool(_rpmpsPool);
   
  +    _rpmfcPool = rpmioFreePool(_rpmfcPool);
       _rpmsxPool = rpmioFreePool(_rpmsxPool);
       _rpmdsPool = rpmioFreePool(_rpmdsPool);
       _rpmfiPool = rpmioFreePool(_rpmfiPool);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfc.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 rpmfc.c
  --- rpm/lib/rpmfc.c   19 Jan 2009 16:58:59 -0000      1.60
  +++ rpm/lib/rpmfc.c   25 Mar 2009 13:38:42 -0000      1.61
  @@ -720,38 +720,6 @@
        }
       }
   }
  -
  -rpmfc rpmfcFree(rpmfc fc)
  -{
  -    if (fc) {
  -     fc->fn = argvFree(fc->fn);
  -     fc->fcolor = argiFree(fc->fcolor);
  -     fc->fcdictx = argiFree(fc->fcdictx);
  -     fc->fddictx = argiFree(fc->fddictx);
  -     fc->fddictn = argiFree(fc->fddictn);
  -     fc->cdict = argvFree(fc->cdict);
  -     fc->ddict = argvFree(fc->ddict);
  -     fc->ddictx = argiFree(fc->ddictx);
  -
  -     fc->provides = rpmdsFree(fc->provides);
  -     fc->requires = rpmdsFree(fc->requires);
  -
  -     fc->iob_java = rpmiobFree(fc->iob_java);
  -     fc->iob_perl = rpmiobFree(fc->iob_perl);
  -     fc->iob_python = rpmiobFree(fc->iob_python);
  -     fc->iob_php = rpmiobFree(fc->iob_php);
  -
  -    }
  -    fc = _free(fc);
  -    return NULL;
  -}
  -
  -rpmfc rpmfcNew(void)
  -{
  -    rpmfc fc = xcalloc(1, sizeof(*fc));
  -    return fc;
  -}
  -
   /**
    * Extract script dependencies.
    * @param fc         file classifier
  @@ -1828,3 +1796,49 @@
   
       return rc;
   }
  +
  +static void rpmfcFini(void *_fc)
  +     /*...@modifies *_fc @*/
  +{
  +    rpmfc fc = _fc;
  +
  +    fc->fn = argvFree(fc->fn);
  +    fc->fcolor = argiFree(fc->fcolor);
  +    fc->fcdictx = argiFree(fc->fcdictx);
  +    fc->fddictx = argiFree(fc->fddictx);
  +    fc->fddictn = argiFree(fc->fddictn);
  +    fc->cdict = argvFree(fc->cdict);
  +    fc->ddict = argvFree(fc->ddict);
  +    fc->ddictx = argiFree(fc->ddictx);
  +
  +    fc->provides = rpmdsFree(fc->provides);
  +    fc->requires = rpmdsFree(fc->requires);
  +
  +    fc->iob_java = rpmiobFree(fc->iob_java);
  +    fc->iob_perl = rpmiobFree(fc->iob_perl);
  +    fc->iob_python = rpmiobFree(fc->iob_python);
  +    fc->iob_php = rpmiobFree(fc->iob_php);
  +}
  +
  +/*...@unchecked@*/ /*...@null@*/
  +rpmioPool _rpmfcPool;
  +
  +static rpmfc rpmfcGetPool(/*...@null@*/ rpmioPool pool)
  +     /*...@modifies pool @*/
  +{
  +    rpmfc fc;
  +
  +    if (_rpmfcPool == NULL) {
  +     _rpmfcPool = rpmioNewPool("fc", sizeof(*fc), -1, _rpmfc_debug,
  +                     NULL, NULL, rpmfcFini);
  +     pool = _rpmfcPool;
  +    }
  +    return (rpmfc) rpmioGetPool(pool, sizeof(*fc));
  +}
  +
  +rpmfc rpmfcNew(void)
  +{
  +    rpmfc fc = rpmfcGetPool(_rpmfcPool);
  +    return rpmfcLink(fc);
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfc.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rpmfc.h
  --- rpm/lib/rpmfc.h   19 Jan 2009 16:58:59 -0000      1.16
  +++ rpm/lib/rpmfc.h   25 Mar 2009 13:38:42 -0000      1.17
  @@ -70,6 +70,7 @@
   /**
    */
   struct rpmfc_s {
  +    struct rpmioItem_s _item;        /*!< usage mutex and pool identifier. */
       size_t nfiles;   /*!< no. of files */
       size_t fknown;   /*!< no. of classified files */
       size_t fwhite;   /*!< no. of "white" files */
  @@ -164,26 +165,6 @@
   /*...@=exportlocal@*/
   
   /**
  - * Destroy a file classifier.
  - * @param fc         file classifier
  - * @return           NULL always
  - */
  -/*...@-exportlocal@*/
  -/*...@null@*/
  -rpmfc rpmfcFree(/*...@only@*/ /*...@null@*/ rpmfc fc)
  -     /*...@modifies fc @*/;
  -/*...@=exportlocal@*/
  -
  -/**
  - * Create a file classifier.
  - * @return           new file classifier
  - */
  -/*...@-exportlocal@*/
  -rpmfc rpmfcNew(void)
  -     /*...@*/;
  -/*...@=exportlocal@*/
  -
  -/**
    * Build file class dictionary and mappings.
    * @param fc         file classifier
    * @param argv               files to classify
  @@ -217,6 +198,48 @@
        /*...@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState 
@*/
        /*...@modifies rpmGlobalMacroContext, fileSystem, internalState @*/;
   
  +/**
  + * Unreference a file classifier instance.
  + * @param ds         dependency set
  + * @return           NULL if free'd
  + */
  +/*...@unused@*/ /*...@null@*/
  +rpmfc rpmfcUnlink (/*...@killref@*/ /*...@only@*/ /*...@null@*/ rpmfc fc)
  +     /*...@modifies fc @*/;
  +#define      rpmfcUnlink(_fc)        \
  +     ((rpmfc)rpmioUnlinkPoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Reference a file classifier instance.
  + * @param ds         file classifier
  + * @return           new file classifier reference
  + */
  +/*...@unused@*/ /*...@newref@*/ /*...@null@*/
  +rpmfc rpmfcLink (/*...@null@*/ rpmfc fc)
  +     /*...@modifies ds @*/;
  +#define      rpmfcLink(_fc)  \
  +     ((rpmfc)rpmioLinkPoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Destroy a file classifier.
  + * @param fc         file classifier
  + * @return           NULL if free'd
  + */
  +/*...@null@*/
  +rpmfc rpmfcFree(/*...@only@*/ /*...@null@*/ rpmfc fc)
  +     /*...@modifies fc @*/;
  +#define      rpmfcFree(_fc)  \
  +     ((rpmfc)rpmioFreePoolItem((rpmioItem)(_fc), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Create a file classifier.
  + * @return           new file classifier
  + */
  +/*...@-exportlocal@*/
  +rpmfc rpmfcNew(void)
  +     /*...@*/;
  +/*...@=exportlocal@*/
  +
   #ifdef __cplusplus
   }
   #endif
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to