2010-06-24 Bharath Suri <bharath.s.jois@gmail.com>

PR 1542/filesystem
	PR 1585/filesystem
	* libfs/src/pipe/fifo.c: pipe_control_t was not deallocated if
	fifo_open() was attempted with (O_WRONLY|O_NONBLOCK).
	Mutex was locked too many times on this path and we needed an unlock.
This commit is contained in:
Joel Sherrill
2010-06-24 19:58:00 +00:00
parent 2aba056637
commit f33be44e4a
2 changed files with 15 additions and 4 deletions

View File

@@ -1,3 +1,11 @@
2010-06-24 Bharath Suri <bharath.s.jois@gmail.com>
PR 1542/filesystem
PR 1585/filesystem
* libfs/src/pipe/fifo.c: pipe_control_t was not deallocated if
fifo_open() was attempted with (O_WRONLY|O_NONBLOCK).
Mutex was locked too many times on this path and we needed an unlock.
2010-06-24 Joel Sherrill <joel.sherrilL@OARcorp.com>
PR 1587/filesystem

View File

@@ -102,6 +102,7 @@ static int pipe_alloc(
if (! pipe->Buffer)
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
rtems_build_name ('P', 'I', 'r', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
@@ -301,15 +302,17 @@ int fifo_open(
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
PIPE_UNLOCK(pipe);
err = -ENXIO;
goto out_error;
}
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
err = -EINTR;