Use rpmswEnter/rpmswExit throughout.
authorjbj <devnull@localhost>
Wed, 2 Apr 2003 23:26:06 +0000 (23:26 +0000)
committerjbj <devnull@localhost>
Wed, 2 Apr 2003 23:26:06 +0000 (23:26 +0000)
CVS patchset: 6730
CVS date: 2003/04/02 23:26:06

lib/depends.c
lib/psm.c
lib/rpmts.c
lib/rpmts.h
lib/transaction.c
rpmio/rpmio.c
rpmio/rpmio_internal.h
rpmio/rpmsq.c
rpmio/rpmsq.h
rpmio/rpmsw.c
rpmio/rpmsw.h

index 8567599..bfe02be 100644 (file)
@@ -1179,7 +1179,7 @@ int rpmtsOrder(rpmts ts)
     rpmalMakeIndex(ts->addedPackages);
 #endif
 
-    (void) rpmswNow(&ts->begin);
+    (void) rpmswEnter(&ts->op, -1);
 
     /* T1. Initialize. */
     if (oType == 0)
@@ -1582,7 +1582,7 @@ assert(newOrderCount == ts->orderCount);
 #endif
     freeBadDeps();
 
-    ts->ms_order += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+    ts->ms_order += rpmswExit(&ts->op, -1)/1000;
 
     return 0;
 }
@@ -1597,7 +1597,7 @@ int rpmtsCheck(rpmts ts)
     int xx;
     int rc;
 
-    (void) rpmswNow(&ts->begin);
+    (void) rpmswEnter(&ts->op, -1);
 
     /* Do lazy, readonly, open of rpm database. */
     if (rpmtsGetRdb(ts) == NULL && ts->dbmode != -1) {
@@ -1724,7 +1724,7 @@ exit:
     mi = rpmdbFreeIterator(mi);
     pi = rpmtsiFree(pi);
 
-    ts->ms_check += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+    ts->ms_check += rpmswExit(&ts->op, -1)/1000;
 
     /*@-branchstate@*/
     if (closeatexit)
index c755cf8..d637443 100644 (file)
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -470,13 +470,18 @@ static pid_t psmWait(rpmpsm psm)
        /*@globals fileSystem, internalState @*/
        /*@modifies psm, fileSystem, internalState @*/
 {
+    const rpmts ts = psm->ts;
+    rpmtime_t msecs;
+
     (void) rpmsqWait(&psm->sq);
+    msecs = psm->sq.op.usecs/1000;
+    ts->ms_scriptlets += msecs;
 
-    rpmMessage(RPMMESS_DEBUG, _("%s: waitpid(%d) rc %d status %x secs %u.%03u\n"),
+    rpmMessage(RPMMESS_DEBUG,
+       _("%s: waitpid(%d) rc %d status %x secs %u.%03u\n"),
        psm->stepName, (unsigned)psm->sq.child,
        (unsigned)psm->sq.reaped, psm->sq.status,
-       (unsigned)psm->sq.msecs/1000,
-       (unsigned)psm->sq.msecs%1000);
+       (unsigned)msecs/1000, (unsigned)msecs%1000);
 
     return psm->sq.reaped;
 }
index 070a62c..13710a5 100644 (file)
@@ -1270,8 +1270,6 @@ rpmts rpmtsCreate(void)
     memset(ts->pksignid, 0, sizeof(ts->pksignid));
     ts->dig = NULL;
 
-    (void) rpmswNow(&ts->create);
-
     ts->nrefs = 0;
 
     return rpmtsLink(ts, "tsCreate");
index 26b9833..9e7ab76 100644 (file)
@@ -194,15 +194,15 @@ struct rpmts_s {
     size_t pkpktlen;           /*!< Current pubkey packet length. */
     unsigned char pksignid[8]; /*!< Current pubkey fingerprint. */
 
-    struct rpmsw_s create;     /*!< Creation time stamp. */
-    struct rpmsw_s begin;      /*!< Begin operation time stamp. */
-    struct rpmsw_s end;                /*!< End operation time stamp. */
+    struct rpmop_s op;         /*!< Transaction operation time stamp. */
+
     rpmtime_t ms_check;
     rpmtime_t ms_order;
     rpmtime_t ms_fingerprint;
     rpmtime_t ms_repackage;
     rpmtime_t ms_install;
     rpmtime_t ms_erase;
+    rpmtime_t ms_scriptlets;
 
 /*@null@*/
     pgpDig dig;                        /*!< Current signature/pubkey parameters. */
index 41ceba2..fc2b6ac 100644 (file)
@@ -1154,7 +1154,7 @@ rpmMessage(RPMMESS_DEBUG, _("sanity checking %d elements\n"), rpmtsNElements(ts)
      */
 rpmMessage(RPMMESS_DEBUG, _("computing %d file fingerprints\n"), totalFileCount);
 
-(void) rpmswNow(&ts->begin);
+    (void) rpmswEnter(&ts->op, -1);
 
     numAdded = numRemoved = 0;
     pi = rpmtsiInit(ts);
@@ -1367,7 +1367,7 @@ rpmMessage(RPMMESS_DEBUG, _("computing file dispositions\n"));
     NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_STOP, 6, ts->orderCount,
        NULL, ts->notifyData));
 
-ts->ms_fingerprint += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+    ts->ms_fingerprint += rpmswExit(&ts->op, -1)/1000;
 
     /* ===============================================
      * Free unused memory as soon as possible.
@@ -1424,7 +1424,7 @@ ts->ms_fingerprint += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
                        numRemoved, NULL, ts->notifyData));
                progress++;
 
-(void) rpmswNow(&ts->begin);
+               (void) rpmswEnter(&ts->op, -1);
 
        /* XXX TR_REMOVED needs CPIO_MAP_{ABSOLUTE,ADDDOT} CPIO_ALL_HARDLINKS */
                fi->mapflags |= CPIO_MAP_ABSOLUTE;
@@ -1437,7 +1437,7 @@ ts->ms_fingerprint += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
                fi->mapflags &= ~CPIO_MAP_ADDDOT;
                fi->mapflags &= ~CPIO_ALL_HARDLINKS;
 
-ts->ms_repackage += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+               ts->ms_repackage += rpmswExit(&ts->op, -1)/1000;
 
                /*@switchbreak@*/ break;
            }
@@ -1472,7 +1472,7 @@ assert(psm != NULL);
 
        switch (rpmteType(p)) {
        case TR_ADDED:
-(void) rpmswNow(&ts->begin);
+           (void) rpmswEnter(&ts->op, -1);
 
            pkgKey = rpmteAddedKey(p);
 
@@ -1569,12 +1569,12 @@ assert(psm != NULL);
 
            p->h = headerFree(p->h);
 
-ts->ms_install += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+           ts->ms_install += rpmswExit(&ts->op, -1)/1000;
 
            /*@switchbreak@*/ break;
 
        case TR_REMOVED:
-(void) rpmswNow(&ts->begin);
+           (void) rpmswEnter(&ts->op, -1);
 
            rpmMessage(RPMMESS_DEBUG, "========== --- %s\n", rpmteNEVR(p));
            /*
@@ -1586,7 +1586,7 @@ ts->ms_install += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
                    ourrc++;
            }
 
-ts->ms_erase += rpmswDiff(rpmswNow(&ts->end), &ts->begin)/1000;
+           ts->ms_erase += rpmswExit(&ts->op, -1)/1000;
 
            /*@switchbreak@*/ break;
        }
index 0ea141e..c0595f8 100644 (file)
@@ -356,9 +356,6 @@ FD_t XfdNew(const char * msg, const char * file, unsigned line)
     fd->ndigests = 0;
     memset(fd->digests, 0, sizeof(fd->digests));
 
-    (void) rpmswNow(&fd->stats->create);
-    (void) rpmswNow(&fd->stats->begin);
-
     fd->ftpFileDoneNeeded = 0;
     fd->firstFree = 0;
     fd->fileSize = 0;
index 64eebd5..ec895af 100644 (file)
@@ -115,7 +115,6 @@ enum FDSTAT_e {
  * Cumulative statistics for a descriptor.
  */
 typedef        /*@abstract@*/ struct {
-    struct rpmsw_s     create; /*!< Structure creation time. */
     struct rpmsw_s     begin;  /*!< Operation start time. */
     struct rpmop_s     ops[4]; /*!< Cumulative statistics. */
 } * FDSTAT_t;
@@ -131,7 +130,8 @@ typedef struct _FDDIGEST_s {
  * The FD_t File Handle data structure.
  */
 struct _FD_s {
-/*@refs@*/ int nrefs;
+/*@refs@*/
+    int                nrefs;
     int                flags;
 #define        RPMIO_DEBUG_IO          0x40000000
 #define        RPMIO_DEBUG_REFS        0x20000000
@@ -141,7 +141,8 @@ struct _FD_s {
     FDSTACK_t  fps[8];
     int                urlType;        /* ufdio: */
 
-/*@dependent@*/ void * url;    /* ufdio: URL info */
+/*@dependent@*/
+    void *     url;            /* ufdio: URL info */
     int                rd_timeoutsecs; /* ufdRead: per FD_t timer */
     ssize_t    bytesRemain;    /* ufdio: */
     ssize_t    contentLength;  /* ufdio: */
@@ -149,7 +150,8 @@ struct _FD_s {
     int                wr_chunked;     /* ufdio: */
 
     int                syserrno;       /* last system errno encountered */
-/*@observer@*/ const void *errcookie;  /* gzdio/bzdio/ufdio: */
+/*@observer@*/
+    const void *errcookie;     /* gzdio/bzdio/ufdio: */
 
     FDSTAT_t   stats;          /* I/O statistics */
 
@@ -356,17 +358,16 @@ void fdPush(FD_t fd, FDIO_t io, void * fp, int fdno)
 
 /** \ingroup rpmio
  */
-/*@-uniondef@*/
 /*@unused@*/ static inline
 void fdstat_enter(/*@null@*/ FD_t fd, int opx)
        /*@globals internalState @*/
        /*@modifies fd, internalState @*/
 {
-    if (fd == NULL || fd->stats == NULL) return;
+    if (fd == NULL) return;
 /*@-boundswrite@*/
-    fd->stats->ops[opx].count++;
+    if (fd->stats != NULL)
+       (void) rpmswEnter(&fd->stats->ops[opx], 0);
 /*@=boundswrite@*/
-    (void) rpmswNow(&fd->stats->begin);
 }
 
 /** \ingroup rpmio
@@ -376,28 +377,16 @@ void fdstat_exit(/*@null@*/ FD_t fd, int opx, ssize_t rc)
        /*@globals internalState @*/
        /*@modifies fd, internalState @*/
 {
-    struct rpmsw_s end;
     if (fd == NULL) return;
-    if (rc == -1) fd->syserrno = errno;
-    if (fd->stats == NULL) return;
+    if (rc == -1)
+       fd->syserrno = errno;
+    else if (rc > 0 && fd->bytesRemain > 0)
+       fd->bytesRemain -= rc;
 /*@-boundswrite@*/
-    (void) rpmswNow(&end);
-    if (rc >= 0) {
-       switch(opx) {
-       case FDSTAT_SEEK:
-           fd->stats->ops[opx].bytes = rc;
-           break;
-       default:
-           fd->stats->ops[opx].bytes += rc;
-           if (fd->bytesRemain > 0) fd->bytesRemain -= rc;
-           break;
-       }
-    }
-    fd->stats->ops[opx].usecs += rpmswDiff(&end, &fd->stats->begin);
-    fd->stats->begin = end;    /* structure assignment */
+    if (fd->stats != NULL)
+       (void) rpmswExit(&fd->stats->ops[opx], rc);
 /*@=boundswrite@*/
 }
-/*@=uniondef@*/
 
 /** \ingroup rpmio
  */
@@ -407,25 +396,25 @@ void fdstat_print(/*@null@*/ FD_t fd, const char * msg, FILE * fp)
        /*@globals fileSystem @*/
        /*@modifies *fp, fileSystem @*/
 {
-    static int usec_scale = 1000000;
+    static int usec_scale = (1000*1000);
     int opx;
 
     if (fd == NULL || fd->stats == NULL) return;
     for (opx = 0; opx < 4; opx++) {
-       rpmop ops = &fd->stats->ops[opx];
-       if (ops->count <= 0) continue;
+       rpmop op = &fd->stats->ops[opx];
+       if (op->count <= 0) continue;
        switch (opx) {
        case FDSTAT_READ:
            if (msg) fprintf(fp, "%s:", msg);
            fprintf(fp, "%8d reads, %8ld total bytes in %d.%06d secs\n",
-               ops->count, (long)ops->bytes,
-               (int)(ops->usecs/usec_scale), (int)(ops->usecs%usec_scale));
+               op->count, (long)op->bytes,
+               (int)(op->usecs/usec_scale), (int)(op->usecs%usec_scale));
            /*@switchbreak@*/ break;
        case FDSTAT_WRITE:
            if (msg) fprintf(fp, "%s:", msg);
            fprintf(fp, "%8d writes, %8ld total bytes in %d.%06d secs\n",
-               ops->count, (long)ops->bytes,
-               (int)(ops->usecs/usec_scale), (int)(ops->usecs%usec_scale));
+               op->count, (long)op->bytes,
+               (int)(op->usecs/usec_scale), (int)(op->usecs%usec_scale));
            /*@switchbreak@*/ break;
        case FDSTAT_SEEK:
            /*@switchbreak@*/ break;
index fe58d09..e676857 100644 (file)
@@ -340,15 +340,6 @@ fprintf(stderr, "    Parent(%p): %p child %d\n", ME(), sq, sq->child);
 /*@=modfilesys@*/
 #endif
 
-#ifdef DYING
-/*@-bounds@*/
-       /* Unblock child. */
-       xx = close(sq->pipes[0]);
-       xx = close(sq->pipes[1]);
-       sq->pipes[0] = sq->pipes[1] = -1;
-/*@=bounds@*/
-#endif
-
     }
 
 out:
@@ -365,7 +356,6 @@ static int rpmsqWaitUnregister(rpmsq sq)
        /*@globals fileSystem, internalState @*/
        /*@modifies sq, fileSystem, internalState @*/
 {
-    struct rpmsw_s end;
     int same_thread = 0;
     int ret = 0;
     int xx;
@@ -384,7 +374,7 @@ static int rpmsqWaitUnregister(rpmsq sq)
     sq->pipes[0] = sq->pipes[1] = -1;
 /*@=bounds@*/
 
-    (void) rpmswNow(&sq->begin);
+    (void) rpmswEnter(&sq->op, -1);
 
     /*@-infloops@*/
     while (ret == 0 && sq->reaped != sq->child) {
@@ -395,10 +385,7 @@ static int rpmsqWaitUnregister(rpmsq sq)
     }
     /*@=infloops@*/
 
-/*@-uniondef@*/
-    sq->msecs = rpmswDiff(rpmswNow(&end), &sq->begin)/1000;
-/*@=uniondef@*/
-    sq->script_msecs += sq->msecs;
+    sq->ms_scriptlets += rpmswExit(&sq->op, -1)/1000;
 
     if (same_thread)
        xx = sigrelse(SIGCHLD);
index 6d80f78..40b8290 100644 (file)
@@ -39,9 +39,8 @@ struct rpmsqElem {
     pid_t child;               /*!< Currently running child. */
     volatile pid_t reaped;     /*!< Reaped waitpid(3) return. */
     volatile int status;       /*!< Reaped waitpid(3) status. */
-    struct rpmsw_s begin;      /*!< Start time. */
-    rpmtime_t msecs;           /*!< Instance duration (msecs). */
-    rpmtime_t script_msecs;    /*!< Accumulated script duration (msecs). */
+    struct rpmop_s op;         /*!< Scriptlet operation timestamp; */
+    rpmtime_t ms_scriptlets;   /*!< Accumulated script duration (msecs). */
     int reaper;                        /*!< Register SIGCHLD handler? */
     int pipes[2];              /*!< Parent/child interlock. */
     void * id;                 /*!< Blocking thread id (pthread_t). */
index 4d521de..89333b0 100644 (file)
@@ -250,16 +250,18 @@ rpmtime_t rpmswInit(void)
 /*@=incondefs@*/
 
 /*@-mods@*/
-int rpmswEnter(rpmop op)
+int rpmswEnter(rpmop op, ssize_t rc)
 {
     op->count++;
+    if (rc < 0)
+       op->usecs = 0;
 /*@-uniondef@*/
     (void) rpmswNow(&op->begin);
 /*@=uniondef@*/
     return 0;
 }
 
-int rpmswExit(rpmop op, ssize_t rc)
+rpmtime_t rpmswExit(rpmop op, ssize_t rc)
 {
     struct rpmsw_s end;
 
@@ -268,6 +270,6 @@ int rpmswExit(rpmop op, ssize_t rc)
 /*@=uniondef@*/
     if (rc > 0)
        op->bytes += rc;
-    return 0;
+    return op->usecs;
 }
 /*@=mods@*/
index 48bcf1b..6ed42e5 100644 (file)
@@ -45,18 +45,22 @@ extern "C" {
  * @param *sw          time stamp
  * @return             0 on success
  */
+/*@-exportlocal@*/
 /*@null@*/
 rpmsw rpmswNow(/*@returned@*/ rpmsw sw)
        /*@globals internalState @*/
        /*@modifies sw, internalState @*/;
+/*@=exportlocal@*/
 
 /** Return benchmark time stamp difference.
  * @param *end         end time stamp
  * @param *begin       begin time stamp
  * @return             difference in micro-seconds
  */
+/*@-exportlocal@*/
 rpmtime_t rpmswDiff(/*@null@*/ rpmsw end, /*@null@*/ rpmsw begin)
        /*@*/;
+/*@=exportlocal@*/
 
 /** Return benchmark time stamp overhead.
  * @return             overhead in micro-seconds
@@ -64,27 +68,28 @@ rpmtime_t rpmswDiff(/*@null@*/ rpmsw end, /*@null@*/ rpmsw begin)
 /*@-exportlocal@*/
 rpmtime_t rpmswInit(void)
        /*@globals internalState @*/
-       /*@modifes internalState @*/;
+       /*@modifies internalState @*/;
 /*@=exportlocal@*/
 
 /** \ingroup rpmio
  * Enter timed operation.
  * @param op                   operation statistics
+ * @param rc                   -1 clears usec counter
  * @return                     0 always
  */
-int rpmswEnter(rpmop op)
+int rpmswEnter(rpmop op, ssize_t rc)
        /*@globals internalState @*/
-       /*@modifes op->count, op->begin, internalState @*/;
+       /*@modifies *op, internalState @*/;
 
 /** \ingroup rpmio
  * Exit timed operation.
  * @param op                   operation statistics
  * @param rc                   per-operation data (e.g. bytes transferred)
- * @return                     0 always
+ * @return                     cumulative usecs for operation
  */
-int rpmswExit(rpmop op, ssize_t rc)
+rpmtime_t rpmswExit(rpmop op, ssize_t rc)
        /*@globals internalState @*/
-       /*@modifes op-bytes, op->usecs, internalState @*/;
+       /*@modifies *op, internalState @*/;
 
 #ifdef __cplusplus
 }