[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm/tools/ rpmrepo.c
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2008-06-23 16:19:19
Message-ID: 20080623161919.80926348470 () rpm5 ! org
[Download RAW message or body]

  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   23-Jun-2008 18:19:19
  Branch: HEAD                             Handle: 2008062316191900

  Modified files:
    rpm/tools               rpmrepo.c

  Log:
    - rpmrepo: put a --stats stopwatch on the mmap digest cost as well.
    - rpmrepo: add repoFclose(), accumulate I/O stats into a ts.
    - rpmrepo: enable --stats display using transaction set.

  Summary:
    Revision    Changes     Path
    2.5         +29 -3      rpm/tools/rpmrepo.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/tools/rpmrepo.c
  ============================================================================
  $ cvs diff -u -r2.4 -r2.5 rpmrepo.c
  --- rpm/tools/rpmrepo.c	23 Jun 2008 15:29:38 -0000	2.4
  +++ rpm/tools/rpmrepo.c	23 Jun 2008 16:19:19 -0000	2.5
  @@ -959,6 +959,29 @@
   }
   
   /**
  + * Close an I/O stream, accumulating uncompress/digest statistics.
  + * @param repo		repository
  + * @param fd		I/O stream
  + * @return		0 on success
  + */
  +static int repoFclose(rpmrepo repo, FD_t fd)
  +	/*@modifies repo, fd @*/
  +{
  +    int rc = 0;
  +
  +    if (fd != NULL) {
  +	if (repo->ts != NULL) {
  +	    (void) rpmswAdd(rpmtsOp(repo->ts, RPMTS_OP_UNCOMPRESS),
  +			fdstat_op(fd, FDSTAT_READ));
  +	    (void) rpmswAdd(rpmtsOp(repo->ts, RPMTS_OP_DIGEST),
  +			fdstat_op(fd, FDSTAT_DIGEST));
  +	}
  +	rc = Fclose(fd);
  +    }
  +    return rc;
  +}
  +
  +/**
    * Open a repository metadata file.
    * @param repo		repository
    * @param rfile		repository metadata file
  @@ -1340,9 +1363,12 @@
   	if (st->st_size > 0)
   	    mapped = mmap(NULL, st->st_size, PROT_READ, MAP_SHARED, Fileno(fd), 0);
   	if (mapped != (void *)-1) {
  +	    rpmop op = rpmtsOp(repo->ts, RPMTS_OP_DIGEST);
  +	    rpmtime_t tstamp = rpmswEnter(op, 0);
   	    DIGEST_CTX ctx = rpmDigestInit(repo->algo, RPMDIGEST_NONE);
   	    xx = rpmDigestUpdate(ctx, mapped, st->st_size);
   	    xx = rpmDigestFinal(ctx, digestp, NULL, asAscii);
  +	    tstamp = rpmswExit(op, st->st_size);
   	    xx = munmap(mapped, st->st_size);
   	    break;
   	}
  @@ -1366,7 +1392,7 @@
   
   exit:
       if (fd)
  -	xx = Fclose(fd);
  +	xx = repoFclose(repo, fd);
       fn = _free(fn);
       return rc;
   }
  @@ -1396,7 +1422,7 @@
       else
   	rfile->digest = xstrdup("");
   
  -    (void) Fclose(rfile->fd);
  +    (void) repoFclose(repo, rfile->fd);
       rfile->fd = NULL;
   
       /* Compute the (usually compressed) ouput file digest too. */
  @@ -1581,7 +1607,7 @@
   	 || rfileXMLWrite(rfile, repoMDExpand(repo, &repo->primary))
   	 || rfileXMLWrite(rfile, xstrdup(rfile->xml_fini)))
   	    rc = 1;
  -	(void) Fclose(rfile->fd);
  +	(void) repoFclose(repo, rfile->fd);
   	rfile->fd = NULL;
       }
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic