summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-06 07:31:48 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-14 07:02:28 +0200
commit694e946dbd64c94343aeb289edd80a60759f7b26 (patch)
treedadfd23f4d37c623b10dca5aff23b0c84f694de7 /cpukit/libcsupport
parentposix: Ignore pshared for semaphores (diff)
downloadrtems-694e946dbd64c94343aeb289edd80a60759f7b26.tar.bz2
libio: Remove special-case reference count
The top-level IO library structures should contain no special-case data. Update #2859.
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/include/rtems/libio.h1
-rw-r--r--cpukit/libcsupport/include/rtems/libio_.h41
-rw-r--r--cpukit/libcsupport/src/libio.c32
3 files changed, 2 insertions, 72 deletions
diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h
index 8226d18ba2..7022de671c 100644
--- a/cpukit/libcsupport/include/rtems/libio.h
+++ b/cpukit/libcsupport/include/rtems/libio.h
@@ -1320,7 +1320,6 @@ struct rtems_libio_tt {
rtems_driver_name_t *driver;
off_t offset; /* current offset into file */
uint32_t flags;
- uint32_t mapping_refcnt; /* current mappings */
rtems_filesystem_location_info_t pathinfo;
uint32_t data0; /* private to "driver" */
void *data1; /* ... */
diff --git a/cpukit/libcsupport/include/rtems/libio_.h b/cpukit/libcsupport/include/rtems/libio_.h
index 695a4c45a5..c2fb975bf7 100644
--- a/cpukit/libcsupport/include/rtems/libio_.h
+++ b/cpukit/libcsupport/include/rtems/libio_.h
@@ -304,47 +304,6 @@ void rtems_libio_free(
rtems_libio_t *iop
);
-/**
- * Garbage collects the free libio in case it was previously freed but there
- * were still references to it.
- */
-void rtems_libio_check_deferred_free( rtems_libio_t *iop );
-
-/**
- * Increment the reference count tracking number of mmap mappings of a file.
- * Returns the updated reference count value.
- */
-static inline uint32_t rtems_libio_increment_mapping_refcnt(rtems_libio_t *iop)
-{
- uint32_t refcnt;
- rtems_libio_lock();
- refcnt = ++iop->mapping_refcnt;
- rtems_libio_unlock();
- return refcnt;
-}
-
-/**
- * Decrement the reference count tracking number of mmap mappings of a file.
- * Returns the updated reference count value.
- */
-static inline uint32_t rtems_libio_decrement_mapping_refcnt(rtems_libio_t *iop)
-{
- uint32_t refcnt;
- rtems_libio_lock();
- refcnt = --iop->mapping_refcnt;
- rtems_libio_unlock();
- return refcnt;
-}
-
-static inline bool rtems_libio_is_mapped(rtems_libio_t *iop)
-{
- bool is_mapped;
- rtems_libio_lock();
- is_mapped = iop->mapping_refcnt != 0;
- rtems_libio_unlock();
- return is_mapped;
-}
-
/*
* File System Routine Prototypes
*/
diff --git a/cpukit/libcsupport/src/libio.c b/cpukit/libcsupport/src/libio.c
index e89634f090..22be6411a2 100644
--- a/cpukit/libcsupport/src/libio.c
+++ b/cpukit/libcsupport/src/libio.c
@@ -138,36 +138,8 @@ void rtems_libio_free(
rtems_libio_lock();
iop->flags = 0;
- /* If the mapping_refcnt is non-zero, the deferred free will be
- * called by munmap. The iop is no longer good to use, but it cannot
- * be recycled until the mapped file is unmapped. deferred free knows
- * it can recycle the iop in case flags == 0 and iop->data1 == iop,
- * since these two conditions are not otherwise satisifed at
- * the same time. It may be possible that iop->data1 == iop when
- * flags != 0 because data1 is private to the driver. However, flags == 0
- * means a freed iop, and an iop on the freelist cannot store a pointer
- * to itself in data1, or else the freelist is corrupted. We can't use
- * NULL in data1 as an indicator because it is used by the tail of the
- * freelist. */
- if ( iop->mapping_refcnt == 0 ) {
- iop->data1 = rtems_libio_iop_freelist;
- rtems_libio_iop_freelist = iop;
- } else {
- iop->data1 = iop;
- }
+ iop->data1 = rtems_libio_iop_freelist;
+ rtems_libio_iop_freelist = iop;
rtems_libio_unlock();
}
-
-void rtems_libio_check_deferred_free(
- rtems_libio_t *iop
-)
-{
- rtems_libio_lock();
- if ( iop->mapping_refcnt == 0 && iop->flags == 0 && iop->data1 == iop) {
- /* No mappings and rtems_libio_free already called, recycle the iop */
- iop->data1 = rtems_libio_iop_freelist;
- rtems_libio_iop_freelist = iop;
- }
- rtems_libio_unlock();
-}