diff options
author | Dimitri Staessens <dimitri.staessens@ugent.be> | 2017-10-30 13:01:25 +0100 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@ugent.be> | 2017-10-30 13:54:02 +0100 |
commit | 81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02 (patch) | |
tree | 8f3e48b2b37d79d737afc83c403eaaa86e14b59e | |
parent | f9cf89d54f0d1661fd78f778d0bdb4812f3bd460 (diff) | |
download | ouroboros-81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02.tar.gz ouroboros-81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02.zip |
dev: Split nonblocking read and write
The FLOWFNONBLOCK flag now has two subflags FLOWFRNOBLOCK and
FLOWFWNOBLOCK which allows setting the behavior of read and write
independently. The default behavior is unchanged (blocking read and
write).
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
-rw-r--r-- | doc/man/fccntl.3 | 6 | ||||
-rw-r--r-- | include/ouroboros/fccntl.h | 5 | ||||
-rw-r--r-- | src/lib/dev.c | 4 |
3 files changed, 11 insertions, 4 deletions
diff --git a/doc/man/fccntl.3 b/doc/man/fccntl.3 index ac28aef5..ad1860ea 100644 --- a/doc/man/fccntl.3 +++ b/doc/man/fccntl.3 @@ -52,7 +52,11 @@ argument. Supported flags are: \fIFLOWFDOWN\fR - mark flow as down. -\fIFLOWFNONBLOCK\fR - set I/O to non-blocking. +\fIFLOWFRNOBLOCK\fR - set read to non-blocking. + +\fIFLOWFWNOBLOCK\fR - set write to non-blocking. + +\fIFLOWFNONBLOCK\fR - set I/O to non-blocking read/write. \fIFLOWFDEFAULT\fR - set flow defaults (blocking, read-write). diff --git a/include/ouroboros/fccntl.h b/include/ouroboros/fccntl.h index 3bd09e65..afaff8fa 100644 --- a/include/ouroboros/fccntl.h +++ b/include/ouroboros/fccntl.h @@ -35,7 +35,10 @@ #define FLOWFDOWN 00000004 /* Flow is down */ -#define FLOWFNONBLOCK 00004000 /* Non-blocking flow */ +#define FLOWFRNOBLOCK 00001000 /* Non-blocking read */ +#define FLOWFWNOBLOCK 00002000 /* Non-blocking write */ +#define FLOWFNONBLOCK 00003000 /* Non-blocking rw */ + #define FLOWFDEFAULT 00000002 /* Default, blocking, rw */ #define FLOWFINVALID (FLOWFWRONLY | FLOWFRDWR) diff --git a/src/lib/dev.c b/src/lib/dev.c index 11ab645d..28a99bc4 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -430,7 +430,7 @@ static ssize_t frcti_read(int fd) pthread_rwlock_rdlock(&ai.lock); - noblock = ai.flows[fd].oflags & FLOWFNONBLOCK; + noblock = ai.flows[fd].oflags & FLOWFRNOBLOCK; rb = ai.flows[fd].rx_rb; if (ai.flows[fd].rcv_timesout) { @@ -1096,7 +1096,7 @@ ssize_t flow_write(int fd, return -EPERM; } - if (ai.flows[fd].oflags & FLOWFNONBLOCK) { + if (ai.flows[fd].oflags & FLOWFWNOBLOCK) { idx = shm_rdrbuff_write(ai.rdrb, DU_BUFF_HEADSPACE, DU_BUFF_TAILSPACE, |