posix: Fix shm_unlink()

This function is untested.
This commit is contained in:
Sebastian Huber
2018-12-11 15:11:10 +01:00
parent b7a1f9efad
commit a1eb0a5793

View File

@@ -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;