[rtems commit] posix: Fix shm_unlink()

Sebastian Huber sebh at rtems.org
Tue Dec 11 14:11:59 UTC 2018


Module:    rtems
Branch:    master
Commit:    a1eb0a5793aa9173a7c681943ace88f6eed0aecc
Changeset: http://git.rtems.org/rtems/commit/?id=a1eb0a5793aa9173a7c681943ace88f6eed0aecc

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Dec 11 15:11:10 2018 +0100

posix: Fix shm_unlink()

This function is untested.

---

 cpukit/posix/src/shmunlink.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/cpukit/posix/src/shmunlink.c b/cpukit/posix/src/shmunlink.c
index f81e234..00d743a 100644
--- a/cpukit/posix/src/shmunlink.c
+++ b/cpukit/posix/src/shmunlink.c
@@ -26,6 +26,8 @@ int shm_unlink( const char *name )
   int err = 0;
   POSIX_Shm_Control *shm;
 
+  _Objects_Allocator_lock();
+
   shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err );
   switch ( obj_err ) {
     case OBJECTS_GET_BY_NAME_INVALID_NAME:
@@ -38,7 +40,11 @@ int shm_unlink( const char *name )
 
     case OBJECTS_GET_BY_NAME_NO_OBJECT:
     default:
-      _Objects_Close( &_POSIX_Shm_Information, &shm->Object );
+      _Objects_Namespace_remove_string(
+        &_POSIX_Shm_Information,
+        &shm->Object
+      );
+
       if ( shm->reference_count == 0 ) {
         /* Only remove the shm object if no references exist to it. Otherwise,
          * the shm object will be freed later in _POSIX_Shm_Attempt_delete */
@@ -46,6 +52,9 @@ int shm_unlink( const char *name )
       }
       break;
   }
+
+  _Objects_Allocator_unlock();
+
   if ( err != 0 )
     rtems_set_errno_and_return_minus_one( err );
   return 0;




More information about the vc mailing list