mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
posix: Fix shm_unlink()
This function is untested.
This commit is contained in:
@@ -26,6 +26,8 @@ int shm_unlink( const char *name )
|
|||||||
int err = 0;
|
int err = 0;
|
||||||
POSIX_Shm_Control *shm;
|
POSIX_Shm_Control *shm;
|
||||||
|
|
||||||
|
_Objects_Allocator_lock();
|
||||||
|
|
||||||
shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err );
|
shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err );
|
||||||
switch ( obj_err ) {
|
switch ( obj_err ) {
|
||||||
case OBJECTS_GET_BY_NAME_INVALID_NAME:
|
case OBJECTS_GET_BY_NAME_INVALID_NAME:
|
||||||
@@ -38,7 +40,11 @@ int shm_unlink( const char *name )
|
|||||||
|
|
||||||
case OBJECTS_GET_BY_NAME_NO_OBJECT:
|
case OBJECTS_GET_BY_NAME_NO_OBJECT:
|
||||||
default:
|
default:
|
||||||
_Objects_Close( &_POSIX_Shm_Information, &shm->Object );
|
_Objects_Namespace_remove_string(
|
||||||
|
&_POSIX_Shm_Information,
|
||||||
|
&shm->Object
|
||||||
|
);
|
||||||
|
|
||||||
if ( shm->reference_count == 0 ) {
|
if ( shm->reference_count == 0 ) {
|
||||||
/* Only remove the shm object if no references exist to it. Otherwise,
|
/* Only remove the shm object if no references exist to it. Otherwise,
|
||||||
* the shm object will be freed later in _POSIX_Shm_Attempt_delete */
|
* the shm object will be freed later in _POSIX_Shm_Attempt_delete */
|
||||||
@@ -46,6 +52,9 @@ int shm_unlink( const char *name )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_Objects_Allocator_unlock();
|
||||||
|
|
||||||
if ( err != 0 )
|
if ( err != 0 )
|
||||||
rtems_set_errno_and_return_minus_one( err );
|
rtems_set_errno_and_return_minus_one( err );
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user