From 3eb9f39e442691de1337ac2978ae18b73dff1d4c Mon Sep 17 00:00:00 2001 From: mdw Date: Tue, 31 Aug 1999 17:42:49 +0000 Subject: [PATCH] Use `sel_force' to avoid a `select' call between reads and writes. --- chan.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/chan.c b/chan.c index 72938da..ad44891 100644 --- a/chan.c +++ b/chan.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: chan.c,v 1.3 1999/07/27 18:30:53 mdw Exp $ + * $Id: chan.c,v 1.4 1999/08/31 17:42:49 mdw Exp $ * * Channel management * @@ -29,6 +29,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: chan.c,v $ + * Revision 1.4 1999/08/31 17:42:49 mdw + * Use `sel_force' to avoid a `select' call between reads and writes. + * * Revision 1.3 1999/07/27 18:30:53 mdw * Various minor portability fixes. * @@ -167,8 +170,10 @@ static void readchan(int fd, unsigned mode, void *vp) } else if (r == 0) goto close; - else if (c->len == 0 && (c->f & CHANF_READY)) + else if (c->len == 0 && (c->f & CHANF_READY)) { sel_addfile(&c->w); + sel_force(&c->w); + } c->len += r; if (c->len == CHAN_BUFSZ) sel_rmfile(&c->r); @@ -178,8 +183,10 @@ static void readchan(int fd, unsigned mode, void *vp) close: c->f |= CHANF_CLOSE; - if (!c->len && (c->f & CHANF_READY)) + if (!c->len && (c->f & CHANF_READY)) { sel_addfile(&c->w); + sel_force(&c->w); + } sel_rmfile(&c->r); } @@ -216,8 +223,10 @@ void chan_dest(chan *c, int fd) if (c->f & CHANF_READY) return; sel_initfile(sel, &c->w, fd, SEL_WRITE, writechan, c); - if (c->len || (c->f & CHANF_CLOSE)) + if (c->len || (c->f & CHANF_CLOSE)) { sel_addfile(&c->w); + sel_force(&c->w); + } c->f |= CHANF_READY; } -- 2.11.0