[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