summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/read.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-13 09:22:19 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-15 10:29:34 +0200
commitbaef823cd550449bfbcc36625b9571389d8ad1af (patch)
tree238c1952d23dc09d41ae99d186d0656f78ed857b /cpukit/libcsupport/src/read.c
parentlibio: Unify readv() and writev() (diff)
downloadrtems-baef823cd550449bfbcc36625b9571389d8ad1af.tar.bz2
libio: Add hold/drop iop reference
Check iop reference count in close() and return -1 with errno set to EBUSY in case the file descriptor is still in use. Update #3132.
Diffstat (limited to 'cpukit/libcsupport/src/read.c')
-rw-r--r--cpukit/libcsupport/src/read.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/cpukit/libcsupport/src/read.c b/cpukit/libcsupport/src/read.c
index d55ff180ae..03c39120bb 100644
--- a/cpukit/libcsupport/src/read.c
+++ b/cpukit/libcsupport/src/read.c
@@ -31,6 +31,7 @@ ssize_t read(
)
{
rtems_libio_t *iop;
+ ssize_t n;
rtems_libio_check_buffer( buffer );
rtems_libio_check_count( count );
@@ -40,7 +41,9 @@ ssize_t read(
/*
* Now process the read().
*/
- return (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
+ n = (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
+ rtems_libio_iop_drop( iop );
+ return n;
}
#if defined(RTEMS_NEWLIB) && !defined(HAVE__READ_R)