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:   21-Jun-2017 09:19:42
  Branch: rpm-5_4                          Handle: 2017062107194200

  Modified files:           (Branch: rpm-5_4)
    rpm/rpmio               rpmeio.c rpmeio.h teio.c

  Log:
    - rpmeio: run time selection of pipe/libev dispatching.

  Summary:
    Revision    Changes     Path
    1.1.2.8     +54 -68     rpm/rpmio/rpmeio.c
    1.1.2.7     +3  -0      rpm/rpmio/rpmeio.h
    1.1.2.13    +1  -1      rpm/rpmio/teio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmeio.c
  ============================================================================
  $ cvs diff -u -r1.1.2.7 -r1.1.2.8 rpmeio.c
  --- rpm/rpmio/rpmeio.c        21 Jun 2017 06:40:28 -0000      1.1.2.7
  +++ rpm/rpmio/rpmeio.c        21 Jun 2017 07:19:42 -0000      1.1.2.8
  @@ -178,29 +178,23 @@
   
   /*==============================================================*/
   
  -#undef       USE_PIPE
  -
   struct rpmevl_s {
  -#if defined(USE_PIPE)
  +    unsigned flags;
       int pipefdno[2];
   #define      pipein  evl->pipefdno[0]
   #define      pipeout evl->pipefdno[1]
  -#else
       struct ev_loop *loop;
       rpmev idle_ev;
       rpmev async_ev;
  -#endif
       rpmzLog zlog;            /*!< high precision timestamp'd log */
   };
   static struct rpmevl_s _evl;
   
   static rpmevl rpmevlGet(void)
   {
  -#if defined(USE_PIPE)
  -    return &_evl;
  -#else
  -   return (rpmevl) ev_userdata(EV_DEFAULT);
  -#endif
  +    if (_evl.flags & RPMEVL_PIPE)
  +     return &_evl;
  +    return (rpmevl) ev_userdata(EV_DEFAULT);
   }
   
   /* idle watcher callback, only used when eio_poll */
  @@ -220,15 +214,12 @@
   static void
   ready (EV_P_ ev_async *w, int revents)
   {
  -#if !defined(USE_PIPE)
       rpmevl evl = (rpmevl) ev_userdata(loop);
       rpmzLog zlog = evl->zlog;
   ZSPEW("--> %s(%p, %p, %d)", __FUNCTION__, loop, w, revents);
   
  -    if (eio_poll() == -1) {
  +    if (eio_poll() == -1)
        evl->idle_ev = rpmevNew(RPMEV_TYPE_IDLE,      NULL);
  -    }
  -#endif       /* USE_PIPE */
   }
   
   /* wake up the event loop */
  @@ -238,15 +229,15 @@
       rpmevl evl = rpmevlGet();
       rpmzLog zlog = evl->zlog;
   
  -#if defined(USE_PIPE)
  -    char dummy = '\0';
  -    ssize_t nw = write(pipeout, &dummy, sizeof(dummy));
  +    if (evl->flags & RPMEVL_PIPE) {
  +     char dummy = '\0';
  +     ssize_t nw = write(pipeout, &dummy, sizeof(dummy));
   ZSPEW("<-- %s(%d) nw %zd", "write", pipeout, nw);
  -#else
  -    ev_async * w = &evl->async_ev->evw.async;
  -    ev_async_send(evl->loop, w);
  +    } else {
  +     ev_async * w = &evl->async_ev->evw.async;
  +     ev_async_send(evl->loop, w);
   ZSPEW("<-- %s()", __FUNCTION__);
  -#endif
  +    }
   }
   
   static
  @@ -255,13 +246,12 @@
       rpmevl evl = rpmevlGet();
       rpmzLog zlog = evl->zlog;
   
  -#if defined(USE_PIPE)
  -    char dummy = '\0';
  -    ssize_t nr = read(pipein, &dummy, sizeof(dummy));
  -ZSPEW("<-- %s(%d) nr %zd nthreads:%u nreqs:%u nready:%u npending:%u", " 
read", pipein, nr, eio_nthreads(), eio_nreqs(), eio_nready(), eio_npending());
  -#else
  +    if (evl->flags & RPMEVL_PIPE) {
  +     char dummy = '\0';
  +     ssize_t nr = read(pipein, &dummy, sizeof(dummy));
  +ZSPEW("<-- %s(%d) nr %zd", " read", pipein, nr);
  +    }
   ZSPEW("<-- %s() nthreads:%u nreqs:%u nready:%u npending:%u", __FUNCTION__, 
eio_nthreads(), eio_nreqs(), eio_nready(), eio_npending());
  -#endif       /* USE_PIPE */
   }
   
   #ifdef       TODO
  @@ -293,33 +283,36 @@
   rpmevl rpmeioStart(unsigned flags)
   {
       int rc;
  +    rpmevl evl = NULL;
   
  -#if defined(USE_PIPE)
  -    rpmevl evl = &_evl;
  -
  -    evl->pipefdno[0] = -1;
  -    evl->pipefdno[1] = -1;
  -    rc = pipe(evl->pipefdno);
  -
  -    if (!rc)
  -     rc = eio_init(want_poll, done_poll);
  +    if (flags & RPMEVL_PIPE) {
  +     evl = &_evl;
  +     evl->pipefdno[0] = -1;
  +     evl->pipefdno[1] = -1;
  +     evl->loop = NULL;
  +     evl->idle_ev = NULL;
  +     evl->async_ev = NULL;
  +
  +     rc = pipe(evl->pipefdno);
  +     if (!rc)
  +         rc = eio_init(want_poll, done_poll);
   
   SPEW("<-- %s() evl %p pipe [%d,%d]", __FUNCTION__, evl, evl->pipefdno[0], 
evl->pipefdno[1]);
  +    } else {
  +     evl = xcalloc(1, sizeof(*evl));
  +     evl->pipefdno[0] = -1;
  +     evl->pipefdno[1] = -1;
  +
  +     evl->loop = ev_default_loop(EVFLAG_AUTO);
  +     ev_set_userdata(evl->loop, evl);
  +     evl->async_ev = rpmevNew(RPMEV_TYPE_ASYNC,     ready);
   
  -#else        /* USE_PIPE */
  -    rpmevl evl = xcalloc(1, sizeof(*evl));
  -
  -    evl->loop = ev_default_loop(EVFLAG_AUTO);
  -    ev_set_userdata(evl->loop, evl);
  -
  -    evl->async_ev = rpmevNew(RPMEV_TYPE_ASYNC,     ready);
  -
  -    rc = eio_init (want_poll, done_poll);
  +     rc = eio_init (want_poll, done_poll);
   
   SPEW("<-- %s() evl %p loop %p", __FUNCTION__, evl, evl->loop);
  +    }
   
  -#endif       /* USE_PIPE */
  -
  +    evl->flags = flags;
       evl->zlog = (_rpmeio_debug || _rpmio_debug) ? rpmzLogNew(NULL) : NULL;
   
       return evl;
  @@ -332,25 +325,20 @@
   
   ZSPEW("==> %s()", __FUNCTION__);
   
  -#if defined(USE_PIPE)
  -
       struct pollfd pfd;
       pfd.fd = pipein;
       pfd.events = POLLIN;
   
       while (eio_nreqs() > 0) {
  -     int xx = poll(&pfd, 1, -1);
  -     (void)xx;
  -     npolls = eio_poll();
  -    }
  -#else
  -
  -    while (eio_nreqs() > 0) {
   ZSPEW("*** %s() nthreads:%u nreqs:%u nready:%u npending:%u", __FUNCTION__, 
eio_nthreads(), eio_nreqs(), eio_nready(), eio_npending());
  -     ev_run(evl->loop, EVRUN_ONCE);
  -     npolls++;
  +     if (evl->flags & RPMEVL_PIPE) {
  +         (void) poll(&pfd, 1, -1);
  +         npolls = eio_poll();
  +     } else {
  +         ev_run(evl->loop, EVRUN_ONCE);
  +         npolls++;
  +     }
       }
  -#endif       /* USE_PIPE */
   
   ZSPEW("<== %s() npolls %d", __FUNCTION__, npolls);
   }
  @@ -360,15 +348,13 @@
       while (eio_nreqs() > 0)
        rpmeioLoop(evl);
   
  -#if defined(USE_PIPE)
  -#else
  -    if (evl->idle_ev)
  -     evl->idle_ev = rpmevFree(evl->idle_ev);
  -    if (evl->async_ev)
  -     evl->async_ev = rpmevFree(evl->async_ev);
  -
  -    ev_loop_destroy(evl->loop);
  -#endif       /* !USE_PIPE */
  +    if (!(evl->flags & RPMEVL_PIPE)) {
  +     if (evl->idle_ev)
  +         evl->idle_ev = rpmevFree(evl->idle_ev);
  +     if (evl->async_ev)
  +         evl->async_ev = rpmevFree(evl->async_ev);
  +     ev_loop_destroy(evl->loop);
  +    }
   
   fprintf(stderr, "***************************************\n");
       if (evl->zlog)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmeio.h
  ============================================================================
  $ cvs diff -u -r1.1.2.6 -r1.1.2.7 rpmeio.h
  --- rpm/rpmio/rpmeio.h        21 Jun 2017 06:40:28 -0000      1.1.2.6
  +++ rpm/rpmio/rpmeio.h        21 Jun 2017 07:19:42 -0000      1.1.2.7
  @@ -8,6 +8,7 @@
   extern int _rpmeio_debug;
   
   typedef      struct rpmeio_s * rpmeio;
  +
   typedef struct rpmevl_s * rpmevl;
   
   /**
  @@ -98,6 +99,8 @@
   extern void rpmeioDumpREQ(const char *msg, eio_req * req, FILE *fp);
   
   rpmevl rpmeioStart(unsigned flags);
  +#define      RPMEVL_PIPE     0x1
  +
   void rpmeioLoop(rpmevl evl);
   void rpmeioDrain(rpmevl evl);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/teio.c
  ============================================================================
  $ cvs diff -u -r1.1.2.12 -r1.1.2.13 teio.c
  --- rpm/rpmio/teio.c  21 Jun 2017 06:40:28 -0000      1.1.2.12
  +++ rpm/rpmio/teio.c  21 Jun 2017 07:19:42 -0000      1.1.2.13
  @@ -158,7 +158,7 @@
   static int doEIO(ARGV_t av, int ac)
   {
       int rc = 0;
  -    unsigned flags = 0;
  +    unsigned flags = 0;      /* RPMEVL_PIPE */
   
       rpmevl evl = rpmeioStart(flags);
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to