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:   30-May-2017 10:31:19
  Branch: rpm-5_4                          Handle: 2017053008311900

  Modified files:           (Branch: rpm-5_4)
    rpm/rpmio               msqio.c

  Log:
    - msqio: rescale loop timeout wait on ETIMEDOUT/EAGAIN.

  Summary:
    Revision    Changes     Path
    1.1.2.23    +9  -1      rpm/rpmio/msqio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/msqio.c
  ============================================================================
  $ cvs diff -u -r1.1.2.22 -r1.1.2.23 msqio.c
  --- rpm/rpmio/msqio.c 30 May 2017 08:17:40 -0000      1.1.2.22
  +++ rpm/rpmio/msqio.c 30 May 2017 08:31:19 -0000      1.1.2.23
  @@ -819,11 +819,11 @@
   
   static ssize_t rpmmsqReaderLoop(rpmmsq msq, int op, char *b, size_t nb, 
unsigned *priop)
   {
  +    struct timespec ts = { 0, 1000 };        /* XXX move into msq for 
persistence? */
       ssize_t rc;
   
       errno = 0;
       do {
  -     struct timespec ts = { 0, 1000 };
            
        switch (op) {
        case LIO_READ:
  @@ -838,18 +838,26 @@
            break;
        }
        /* Retry operation on timeouts and queue full. */
  +#define      NSEC    (1000*1000*1000)
        if (rc < 0) {
            switch (errno) {
            case ETIMEDOUT:     /* XXX mq_timedreceive() */
                msq->ntimeout++;
                Z(nanosleep(&ts, NULL));
  +             ts.tv_nsec <<= 1;
  +             ts.tv_sec += ts.tv_nsec / NSEC;
  +             ts.tv_nsec %= NSEC;
                continue;
            case EAGAIN:        /* XXX O_NONBLOCK */
                msq->nagain++;
                Z(nanosleep(&ts, NULL));
  +             ts.tv_nsec <<= 1;
  +             ts.tv_sec += ts.tv_nsec / NSEC;
  +             ts.tv_nsec %= NSEC;
                continue;
            }
        }
  +#undef       NSEC
        break;
       } while (rc < 0);
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to