[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