[CVS] RPM: rpm-5_4: rpm/rpmio/ rpmeio.c rpmeio.h
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: 04-Jul-2017 05:14:16 Branch: rpm-5_4 Handle: 2017070403141600 Modified files: (Branch: rpm-5_4) rpm/rpmio rpmeio.c rpmeio.h Log: - rpmeio: permit building --without-libeio. Summary: RevisionChanges Path 1.1.2.11+282 -154 rpm/rpmio/rpmeio.c 1.1.2.9 +48 -50 rpm/rpmio/rpmeio.h patch -p0 <<'@@ .' Index: rpm/rpmio/rpmeio.c $ cvs diff -u -r1.1.2.10 -r1.1.2.11 rpmeio.c --- rpm/rpmio/rpmeio.c21 Jun 2017 09:09:37 - 1.1.2.10 +++ rpm/rpmio/rpmeio.c4 Jul 2017 03:14:16 - 1.1.2.11 @@ -1,19 +1,140 @@ #include "system.h" +#if defined(WITH_LIBEV) + #if defined(HAVE_EV_H) # include #endif +#else/* WITH_LIBEV */ + +/* XXX stub in enough to include rpmev.h */ +#define EV_P_ void * loop, +#define EV_A_ NULL, +#define EV_DEFAULT ev_default_loop(0) +#define EVFLAG_AUTO 0 +#define EVRUN_ONCE 2 + +typedef struct ev_watcher ev_idle; +typedef struct ev_watcher ev_async; + +struct ev_watcher { +int active; +int pending; +int priority; +void * data; +void (*cb)(EV_P_ void *w, int revents); +}; + +union ev_any_watcher +{ +struct ev_watcher w; +struct ev_watcher async; +}; + +#define ev_default_loop(_a) NULL + +#define ev_userdata(_x) NULL + +#define ev_set_userdata(_x, y) + +#define ev_idle_stop(_w)(void)_w +#define ev_async_send(_l, _w) (void)_w +#define ev_run(_a, _b) +#define ev_loop_destroy(_a) + +#endif /* WITH_LIBEV */ + +#if defined(WITH_LIBEIO) + +#if defined(HAVE_EIO_H) +# include +#endif + +#else/* WITH_LIBEIO */ + +typedef struct eio_req eio_req; +typedef int (*eio_cb)(eio_req *req); + +typedef struct eio_pwd * eio_wd; +typedef double eio_tstamp; +typedef int eio_uid_t; +typedef int eio_gid_t; +typedef ssize_t eio_ssize_t; + +/* XXX stub in enough to include rpmeio.h */ +struct eio_req +{ +eio_req volatile *next; /* private ETP */ +eio_wd wd; /* all applicable requests: working directory of pathname, old name; wd_open: return wd */ +eio_ssize_t result; /* result of syscall, e.g. result = read (... */ +off_t offs; /* read, write, truncate, readahead, sync_file_range, fallocate: file offset, mknod: dev_t */ +size_t size; /* read, write, readahead, sendfile, msync, mlock, sync_file_range, fallocate: length */ +void *ptr1; /* all applicable requests: pathname, old name; readdir: optional eio_dirents */ +void *ptr2; /* all applicable requests: new name or memory buffer; readdir: name strings */ +eio_tstamp nv1; /* utime, futime: atime; busy: sleep time */ +eio_tstamp nv2; /* utime, futime: mtime */ + +int int1;/* all applicable requests: file descriptor; sendfile: output fd; open, msync, mlockall, readdir: flags */ +long int2; /* chown, fchown: uid; sendfile: input fd; open, chmod, mkdir, mknod: file mode, seek: whence, sync_file_range, fallocate: flags */ +long int3; /* chown, fchown: gid; rename, link: working directory of new name */ +int errorno; /* errno value on syscall return */ + +signed char type;/* EIO_xxx constant ETP */ + +unsigned char cancelled; /* ETP */ + +unsigned char flags; /* private */ +#define EIO_FLAG_PTR1_FREE 0x01 +#define EIO_FLAG_PTR2_FREE 0x02 + +signed char pri; /* the priority */ +#define EIO_PRI_MIN -4 +#define EIO_PRI_MAX 4 +#define EIO_PRI_DEFAULT 0 + +void *data; +eio_cb finish; +void (*destroy)(eio_req *req); /* called when request no longer needed */ +void (*feed)(eio_req *req);/* only used for group requests */ + +eio_req *grp, *grp_prev, *grp_next, *grp_first; /* private ETP */ +}; + +#define eio_poll() -1 +#define eio_nthreads() 0 +#define eio_nready()0 +#define eio_nreqs() 0 +#define eio_npending() 0
[CVS] RPM: rpm-5_4: rpm/rpmio/ rpmeio.c
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 11:09:37 Branch: rpm-5_4 Handle: 2017062109093700 Modified files: (Branch: rpm-5_4) rpm/rpmio rpmeio.c Log: - rpmeio: fix: make sure readlink/realpath buffers are NUL terminated. Summary: RevisionChanges Path 1.1.2.10+8 -1 rpm/rpmio/rpmeio.c patch -p0 <<'@@ .' Index: rpm/rpmio/rpmeio.c $ cvs diff -u -r1.1.2.9 -r1.1.2.10 rpmeio.c --- rpm/rpmio/rpmeio.c21 Jun 2017 07:42:48 - 1.1.2.9 +++ rpm/rpmio/rpmeio.c21 Jun 2017 09:09:37 - 1.1.2.10 @@ -433,9 +433,16 @@ rpmzLog zlog = (evl ? evl->zlog : NULL); ZSPEW("--> %s(%s|%p) res %ld eio %p", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), EIO_RESULT(req), eio); -if (req->type == EIO_READLINK && req->result >= 0) { +if (req->result >= 0) +switch (req->type) { +case EIO_READLINK: +case EIO_REALPATH: +{ char * b = (char *) EIO_BUF(req); b[req->result] = '\0'; +} break; +default: + break; } rpmeioDumpREQ(__FUNCTION__, req, NULL); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmio/ rpmeio.c rpmeio.h teio.c
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:42:48 Branch: rpm-5_4 Handle: 2017062107424800 Modified files: (Branch: rpm-5_4) rpm/rpmio rpmeio.c rpmeio.h teio.c Log: - rpmeio: stub in parameter setting. Summary: RevisionChanges Path 1.1.2.9 +15 -14 rpm/rpmio/rpmeio.c 1.1.2.8 +3 -1 rpm/rpmio/rpmeio.h 1.1.2.14+9 -1 rpm/rpmio/teio.c patch -p0 <<'@@ .' Index: rpm/rpmio/rpmeio.c $ cvs diff -u -r1.1.2.8 -r1.1.2.9 rpmeio.c --- rpm/rpmio/rpmeio.c21 Jun 2017 07:19:42 - 1.1.2.8 +++ rpm/rpmio/rpmeio.c21 Jun 2017 07:42:48 - 1.1.2.9 @@ -256,18 +256,6 @@ #ifdef TODO -eio_set_max_poll_time(eio_tstamp nseconds); -eio_set_max_poll_reqs(unsigned int nreqs); -eio_set_min_parallel(unsigned int nthreads); -eio_set_max_parallel(unsigned int nthreads); -eio_set_max_idle(unsigned int nthreads); -eio_set_idle_timeout (unsigned int seconds); - -unsigned nreqs = eio_nreqs(); -unsigned nready = eio_nready(); -unsigned nthreads = eio_nthreads(); -unsigned npending = eio_npending(); - #define EIO_STACKSIZE 4096/* default? */ eio _req *grp = eio_grp(eio_cb cb, void *data); @@ -280,7 +268,9 @@ #endif /* TODO */ -rpmevl rpmeioStart(unsigned flags) +rpmevl rpmeioStart(double max_poll_time, unsigned max_poll_reqs, + unsigned min_parallel, unsigned max_parallel, + unsigned max_idle, unsigned idle_timeout, unsigned flags) { int rc; rpmevl evl = NULL; @@ -311,7 +301,18 @@ SPEW("<-- %s() evl %p loop %p", __FUNCTION__, evl, evl->loop); } - +if (max_poll_time > 0.0) + eio_set_max_poll_time(max_poll_time); +if (max_poll_reqs) + eio_set_max_poll_reqs(max_poll_reqs); +if (min_parallel) + eio_set_min_parallel(min_parallel); +if (max_parallel) + eio_set_max_parallel(max_parallel); +if (max_idle) + eio_set_max_idle(max_idle); +if (idle_timeout) + eio_set_idle_timeout(idle_timeout); evl->flags = flags; evl->zlog = (_rpmeio_debug || _rpmio_debug) ? rpmzLogNew(NULL) : NULL; @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmeio.h $ cvs diff -u -r1.1.2.7 -r1.1.2.8 rpmeio.h --- rpm/rpmio/rpmeio.h21 Jun 2017 07:19:42 - 1.1.2.7 +++ rpm/rpmio/rpmeio.h21 Jun 2017 07:42:48 - 1.1.2.8 @@ -98,7 +98,9 @@ extern void rpmeioDumpREQ(const char *msg, eio_req * req, FILE *fp); -rpmevl rpmeioStart(unsigned flags); +rpmevl rpmeioStart(double max_poll_time, unsigned max_poll_reqs, + unsigned min_parallel, unsigned max_parallel, + unsigned max_idle, unsigned idle_timeout, unsigned flags); #define RPMEVL_PIPE 0x1 void rpmeioLoop(rpmevl evl); @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/teio.c $ cvs diff -u -r1.1.2.13 -r1.1.2.14 teio.c --- rpm/rpmio/teio.c 21 Jun 2017 07:19:42 - 1.1.2.13 +++ rpm/rpmio/teio.c 21 Jun 2017 07:42:48 - 1.1.2.14 @@ -158,9 +158,17 @@ static int doEIO(ARGV_t av, int ac) { int rc = 0; +double max_poll_time = 0.0; +unsigned max_poll_reqs = 0; +unsigned min_parallel = 0; +unsigned max_parallel = 0; +unsigned max_idle = 0; +unsigned idle_timeout = 0; unsigned flags = 0; /* RPMEVL_PIPE */ -rpmevl evl = rpmeioStart(flags); +rpmevl evl = rpmeioStart(max_poll_time, max_poll_reqs, + min_parallel, max_parallel, + max_idle, idle_timeout, flags); do { /* avoid relative paths yourself(!) */ @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmio/ rpmeio.c rpmeio.h teio.c
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: RevisionChanges 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.c21 Jun 2017 06:40:28 - 1.1.2.7 +++ rpm/rpmio/rpmeio.c21 Jun 2017 07:19:42 - 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, , sizeof(dummy)); +if (evl->flags & RPMEVL_PIPE) { + char dummy = '\0'; + ssize_t nw = write(pipeout, , sizeof(dummy)); ZSPEW("<-- %s(%d) nw %zd", "write", pipeout, nw); -#else -ev_async * w = >async_ev->evw.async; -ev_async_send(evl->loop, w); +} else { + ev_async * w = >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, , 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, , 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); -
[CVS] RPM: rpm-5_4: rpm/rpmio/ rpmeio.c
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: 16-Jun-2017 13:00:06 Branch: rpm-5_4 Handle: 2017061611000600 Modified files: (Branch: rpm-5_4) rpm/rpmio rpmeio.c Log: - rpmeio: haul out a load of trash. Summary: RevisionChanges Path 1.1.2.4 +36 -188rpm/rpmio/rpmeio.c patch -p0 <<'@@ .' Index: rpm/rpmio/rpmeio.c $ cvs diff -u -r1.1.2.3 -r1.1.2.4 rpmeio.c --- rpm/rpmio/rpmeio.c16 Jun 2017 06:14:09 - 1.1.2.3 +++ rpm/rpmio/rpmeio.c16 Jun 2017 11:00:06 - 1.1.2.4 @@ -91,10 +91,17 @@ if (req->size) PRINT(zu, size); +#ifdef DYING if (req->ptr1) PRINT(p, ptr1); if (req->ptr2) PRINT(p, ptr2); +#else + if (req->ptr1) + fprintf(fp, "%25s: %p %s\n", "ptr1", req->ptr1, (char *)req->ptr1); + if (req->ptr2) + fprintf(fp, "%25s: %p %s\n", "ptr2", req->ptr2, (char *)req->ptr2); +#endif if (req->nv1 != 0.0) PRINT(f, nv1); @@ -111,7 +118,7 @@ #ifdef DYING PRINT(d, errorno); #else - if (req->errorno) + if (req->result < 0 && req->errorno) fprintf(fp, "%25s: %d %s\n", "errorno", REQ_ERRNO(req), strerror(REQ_ERRNO(req))); #endif @@ -125,8 +132,8 @@ PRINT(hhx, cancelled); if (req->flags) PRINT(hhx, flags); - if (req->pri) - PRINT(hhx, pri); + if (!(req->pri == 0 || req->pri == 4)) + PRINT(hhx, pri); #ifdef NOTYET if (req->data) @@ -276,6 +283,26 @@ { rpmeio eio = (rpmeio) (((rpmioItem)req) - 1); SPEW("--> %s(%p) eio %p\n", __FUNCTION__, req, eio); + +/* XXX wipe variables to shorten rpmeioDumpREQ() spewage. */ +req->next = NULL; +req->result = 0; +req->errorno = 0; + +req->pri = 0; +req->flags = 0; +req->ptr1 = NULL; +req->ptr2 = NULL; + +req->nv1 = 0.0; +req->nv2 = 0.0; +req->offs = 0; +req->size = 0; +req->int1 = 0; +req->int2 = 0; +req->int3 = 0; +req->finish = NULL; +req->destroy = NULL; rpmeioDumpREQ(__FUNCTION__, req, NULL); do { @@ -584,6 +611,8 @@ data = "fchown"; // req = eio_fchown(fdno, uid, gid, pri, cb, data); req->int1 = fdno; + req->int2 = uid; + req->int3 = gid; break; case EIO_SYNC: cb = rpmeioCB; @@ -704,7 +733,7 @@ case EIO_READDIR: path = va_arg(ap, const char *); flags = va_arg(ap, int); - cb = rpmeioCB_open; + cb = rpmeioCB_readdir; data = "readdir"; // req = eio_readdir(path, flags, pri, cb, data); req->flags |= EIO_FLAG_PTR1_FREE; @@ -809,6 +838,7 @@ break; case EIO_MKDIR: path = va_arg(ap, const char *); + mode = va_arg(ap, mode_t); cb = rpmeioCB; data = "mkdir"; // req = eio_mkdir(path, mode, pri, cb, data); @@ -904,6 +934,8 @@ // eio->req.grp_prev = NULL; // eio->req.grp_next = NULL; +rpmeioDumpREQ(__FUNCTION__, req, NULL); + exit: SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), req); @@ -926,12 +958,8 @@ /*==*/ eio_req *Eio_wd_open (const char *path, int pri, eio_cb cb, void *data) { -#ifdef DYING -eio_req * req = eio_wd_open(path, pri, cb, data); -#else eio_req * req = rpmeioReq(EIO_WD_OPEN, path, pri, cb, data); Eio_submit(req); -#endif /* DYING */ SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), req); return req; @@ -939,540 +967,360 @@ eio_req *Eio_wd_close (eio_wd wd, int pri, eio_cb cb, void *data) { -#ifdef DYING -eio_req *req = eio_wd_close(wd, pri, cb, data); -#else eio_req *req = rpmeioReq(EIO_WD_CLOSE, wd, pri, cb, data); Eio_submit(req); -#endif /* DYING */ SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), req); return req; } eio_req *Eio_nop (int pri, eio_cb cb, void *data) { -#ifdef DYING -eio_req *req = eio_nop(pri, cb, data); -#else eio_req *req = rpmeioReq(EIO_NOP, pri, cb, data); Eio_submit(req); -#endif /* DYING */ SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), req);