Gregory Nutt
729a65f3ab
drivers/serial/pty.c: Add support so that a PTY can poll for both IN/OUT event simultaneously.
2018-08-26 07:27:19 -06:00
ligd
38cd556af8
Write to a pipe when there are no readers from the pipe should return -EPIPE.
2018-08-26 07:17:31 -06:00
Gregory Nutt
7cf88d7dbd
Make sure that labeling is used consistently in all function headers.
2018-02-01 10:00:02 -06:00
Jussi Kivilinna
ce88bc212d
From c73dd8973accd312ca7675fde044df80e9cc62d5 Mon Sep 17 00:00:00 2001
...
From: Jussi Kivilinna <jussi.kivilinna@haltian.com>
Date: Thu, 7 Dec 2017 13:00:14 +0200
Subject: [PATCH] drivers/pipes: poll: fix off-by-one error in calculation of bytes in the buffer
Buffer calculation in pipe poll setup is off-by-one when read indexis larger than write index. This causes poll() not getting POLLINwhen buffer has one byte as calculation gives zero bytes in buffer.
Reproducible with:
{
char buf[8] = { 0, };
int fds[2];
struct pollfd in_pfd;
pipe2(fds, 8);
write(fds[1], buf, 7);
read(fds[0], buf, 7);
write(fds[1], buf, 1);
in_pfd.fd = fds[0];
in_pfd.events = POLLIN;
ret = poll(&in_pfd, 1, -1); // pipe bug => stuck waiting
assert(ret == 1);
}
2017-12-07 07:12:11 -06:00
Gregory Nutt
9568600ab1
Squashed commit of the following:
...
This commit backs out most of commit b4747286b1
. That change was added because sem_wait() would sometimes cause cancellation points inappropriated. But with these recent changes, nxsem_wait() is used instead and it is not a cancellation point.
In the OS, all calls to sem_wait() changed to nxsem_wait(). nxsem_wait() does not return errors via errno so each place where nxsem_wait() is now called must not examine the errno variable.
In all OS functions (not libraries), change sem_wait() to nxsem_wait(). This will prevent the OS from creating bogus cancellation points and from modifying the per-task errno variable.
sched/semaphore: Add the function nxsem_wait(). This is a new internal OS interface. It is functionally equivalent to sem_wait() except that (1) it is not a cancellation point, and (2) it does not set the per-thread errno value on return.
2017-10-04 15:22:27 -06:00
Gregory Nutt
42a0796615
Squashed commit of the following:
...
sched/semaphore: Add nxsem_post() which is identical to sem_post() except that it never modifies the errno variable. Changed all references to sem_post in the OS to nxsem_post().
sched/semaphore: Add nxsem_destroy() which is identical to sem_destroy() except that it never modifies the errno variable. Changed all references to sem_destroy() in the OS to nxsem_destroy().
libc/semaphore and sched/semaphore: Add nxsem_getprotocol() and nxsem_setprotocola which are identical to sem_getprotocol() and set_setprotocol() except that they never modifies the errno variable. Changed all references to sem_setprotocol in the OS to nxsem_setprotocol(). sem_getprotocol() was not used in the OS
2017-10-03 15:35:24 -06:00
Gregory Nutt
83cdb0c552
Squashed commit of the following:
...
libc/semaphore: Add nxsem_getvalue() which is identical to sem_getvalue() except that it never modifies the errno variable. Changed all references to sem_getvalue in the OS to nxsem_getvalue().
sched/semaphore: Rename all internal private functions from sem_xyz to nxsem_xyz. The sem_ prefix is (will be) reserved only for the application semaphore interfaces.
libc/semaphore: Add nxsem_init() which is identical to sem_init() except that it never modifies the errno variable. Changed all references to sem_init in the OS to nxsem_init().
sched/semaphore: Rename sem_tickwait() to nxsem_tickwait() so that it is clear this is an internal OS function.
sched/semaphoate: Rename sem_reset() to nxsem_reset() so that it is clear this is an internal OS function.
2017-10-03 12:52:31 -06:00
Jussi Kivilinna
1604ae7ca7
drivers/pipes: pipe_common: fix writing large buffers not triggering POLLIN for reader poll
2017-09-22 06:03:08 -06:00
Nobutaka Toyoshima
a862b653bd
Replace sprintf() with snprintf() in pipe.c
...
Jira: PDFW15IS-265
Coverity-ID: 10696
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2017-05-22 09:22:23 +09:00
Gregory Nutt
ba2b345990
Remove a few remaining use of the obsolteted 'Compilation Switches' program section
2017-01-22 08:57:18 -06:00
Gregory Nutt
4fcbe8e410
drivers: Disable priority inheritance on all semaphores used for signaling
2016-11-03 11:00:47 -06:00
Gregory Nutt
83c7b4d5d6
SPI driver: Correct return value in case of a certain error condition
2016-08-06 08:07:30 -06:00
Gregory Nutt
084d200a66
PTY: Cosmetic, update some comments
2016-07-26 10:09:35 -06:00
Gregory Nutt
e0b4a10dfa
drivers/serial/pty.c, serial.c, usbdev/cdcacm.c, include/nuttx/fs/ioctl.h: Fix FIONWRITE and add FIONSPACE. All implementations of FIONWRITE were wrong. FIONWRITE should return the number of bytes waiting in the outgoing send queue, not the free space. Rather, FIONSPACE should return the free space in the send queue.
2016-07-25 14:06:32 -06:00
Gregory Nutt
4b4dbc79a2
Move driver related prototypes out of include/nuttx/fs/fs.h and into new include/drivers/drivers.h
2016-07-20 13:15:37 -06:00
Gregory Nutt
e73e82a923
Move prototypes of mkfifo2() from sys/stat.h and pipe2() from unistd.h. They are non-standard and should not be in such a public place. They are not in include/nuttx/fs/fs.h (which isn't a great place either).
2016-07-20 11:57:18 -06:00
Gregory Nutt
b28fa8a609
Move pipe() and mkpipe() to nuttx/libc. Change syscalls to pipe2() and mkfifo2()
2016-07-19 14:15:26 -06:00
Gregory Nutt
671d7fae31
Add mkfifo2() and pipe2() which are just like mkfifo() and pipe(), but allow control of the size of the underlying, in-memory circular buffer
2016-07-19 13:51:05 -06:00
Gregory Nutt
9a44f3017b
Fix a few typos in the last commit
2016-07-19 13:40:54 -06:00
Gregory Nutt
d6bf67f9ff
Alloc different sizes for pipe and fifo buffers
2016-07-19 13:34:18 -06:00
Gregory Nutt
6194467c13
PTY: Fix termios read input processing.. what was I thinking? Also, if some data was read, pty_read() should not block on the empty FIFO.
2016-07-18 08:00:56 -06:00
Frank Benkert
5d3cdff16b
drivers/pipes/Kconfig: Add missing configuration for pipe ring buffer size.
2016-07-08 06:32:58 -06:00
Gregory Nutt
2a751068e6
Without lowsyslog() *llerr() is not useful. Eliminate and replace with *err().
2016-06-20 12:44:38 -06:00
Gregory Nutt
0c8c7fecf0
Add _ to the beginning of all debug macros to avoid name collisions
2016-06-16 12:33:32 -06:00
Gregory Nutt
0f249016a0
Eliminate some warnings
2016-06-13 14:01:32 -06:00
Gregory Nutt
efb02f2ef1
drivers/: Change some nerr() ERRORS to nwarn() WARNINGS. Anomolous network evernts are not errors.
2016-06-12 08:31:22 -06:00
Gregory Nutt
a1469a3e95
Add CONFIG_DEBUG_ERROR. Change names of *dbg() * *err()
2016-06-11 15:50:49 -06:00
Gregory Nutt
e99301d7c2
Rename *lldbg to *llerr
2016-06-11 14:55:27 -06:00
Gregory Nutt
86b79b33cf
Reserver the name 'err' for other purposes
2016-06-11 14:40:07 -06:00
Gregory Nutt
1cdc746726
Rename CONFIG_DEBUG to CONFIG_DEBUG_FEATURES
2016-06-11 14:14:08 -06:00
Gregory Nutt
fc3540cffe
Replace all occurrences of vdbg with vinfo
2016-06-11 11:59:51 -06:00
Paul A. Patience
f8f7b7582c
Silence some warnings
2016-05-26 14:06:13 -04:00
Gregory Nutt
c49bd4179a
Purely cosmetic
2016-03-20 18:44:44 -06:00
Andrew Tridgell
38eb8bb1b0
pipes: support FIONREAD and FIONWRITE ioctl on pipes; use semaphores for pipecommon_ioctl().
2016-03-20 18:11:13 -06:00
Gregory Nutt
006528b144
Add support for freopen()
2015-11-22 08:39:17 -06:00
Gregory Nutt
cf14f8d1b5
drivers/: Fixes to spacing and alignement
2015-10-10 10:41:00 -06:00
Gregory Nutt
0b12dbf95d
Fix some spacing problems
2015-10-04 15:04:00 -06:00
Paul A. Patience
3b89eabd50
Correct #if to #ifdef when the macro can be undefined. Fix bug in AT24XX driver: it should compare AT24XX_ADDRSIZE to 2.
2015-09-01 13:52:29 -04:00
Gregory Nutt
342f5fe33d
Fix references to the no-longer-existent misc/ directory in comments, README files, and documentation
2015-06-28 08:08:57 -06:00
Gregory Nutt
3c1af2feed
Local sockets: Add poll support for Unix stream sockets. From Jussi Kivilinna.
2015-05-12 07:41:12 -06:00
Gregory Nutt
da04b29a68
Yet another missing semicolon on DEBUGASSERT
2015-04-23 07:29:15 -06:00
Gregory Nutt
e4d2822af8
Make some file section headers more consistent with standard
2015-04-08 07:15:32 -06:00
Gregory Nutt
0a939ff218
Pipes: Fix zero-lenth writes. From Jussi Kivilinna
2015-03-13 07:21:06 -06:00
Gregory Nutt
63ab39b274
VFS: The inode unlink method should not be support if operations on the root pseudo-filesystem are disabled.
2015-02-18 09:34:58 -06:00
Gregory Nutt
410fcaa0a1
Added a forward reference to struct inode to avoid warning about mismatching types in assignemnt
2015-02-10 13:41:49 -06:00
Gregory Nutt
eceac1612d
Fix some compilation errors introduced in the last commit
2015-01-31 13:24:59 -06:00
Gregory Nutt
eb1aca3e46
Add an unlink method to block driver interface. Same motivataion as for the same modification to the character driver interface
2015-01-31 13:19:23 -06:00
Gregory Nutt
39a5238c43
Pipes/FIFOs: Implement the unlink method. If the pipe/FIFO is unlinked, it will marked the pipe/FIFO as unliked. If/when all open references to the driver are closed, all of the driver resources will be freed.
2015-01-31 12:05:01 -06:00
Gregory Nutt
e86d00913e
Unix domain/FIFOs: Fix a race condition between FIFO buffer operations and the opening and closing of FIFOs which necessary when the FIFOs are used to support Unix domain, datagram sockets. The default policy is the deallocate FIFO buffering when the last client closes the pipe. When when used for datagram communicatinos, packets left in the FIFO will be lost. Some like UDP read-ahead is needed: The buffered data in the FIFO needs to be retained until the reader gets a chance to re-open the FIFO. Added an ioctl (PIPEIOC_POLICY) to control the buffer policy. Default (0) is the legacy behavior; Unix domain datagram logic sets the alternative policy so that the packet data persists after the FIFO is closed.
2015-01-30 11:14:24 -06:00
Gregory Nutt
a4a6917267
Fixes some issues found by the PX4 team using Coverity. From Pavel Krienko
2015-01-19 13:01:20 -06:00