diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-27 16:46:57 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-02 07:46:15 +0200 |
commit | f4d541ccfe6a6e64a06cbf89bc7b03e045f62281 (patch) | |
tree | d908f904d9faf3536acb6184727749103faaa3f9 | |
parent | rtems: Avoid Giant lock for semaphores (diff) | |
download | rtems-f4d541ccfe6a6e64a06cbf89bc7b03e045f62281.tar.bz2 |
rtems: Avoid Giant lock in rtems_object_set_name()
Update #2555.
-rw-r--r-- | cpukit/rtems/src/rtemsobjectsetname.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/cpukit/rtems/src/rtemsobjectsetname.c b/cpukit/rtems/src/rtemsobjectsetname.c index 52284977ba..ccdda15737 100644 --- a/cpukit/rtems/src/rtemsobjectsetname.c +++ b/cpukit/rtems/src/rtemsobjectsetname.c @@ -19,8 +19,8 @@ #endif #include <rtems/rtems/object.h> +#include <rtems/rtems/tasks.h> #include <rtems/score/objectimpl.h> -#include <rtems/score/thread.h> /* * This method will set the object name based upon the user string. @@ -33,33 +33,27 @@ rtems_status_code rtems_object_set_name( ) { Objects_Information *information; - Objects_Locations location; Objects_Control *the_object; Objects_Id tmpId; if ( !name ) return RTEMS_INVALID_ADDRESS; - tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Get_executing()->Object.id : id; + tmpId = (id == OBJECTS_ID_OF_SELF) ? rtems_task_self() : id; information = _Objects_Get_information_id( tmpId ); if ( !information ) return RTEMS_INVALID_ID; - the_object = _Objects_Get( information, tmpId, &location ); - switch ( location ) { + _Objects_Allocator_lock(); + the_object = _Objects_Get_no_protection( tmpId, information ); - case OBJECTS_LOCAL: - _Objects_Set_name( information, the_object, name ); - _Objects_Put( the_object ); - return RTEMS_SUCCESSFUL; - -#if defined(RTEMS_MULTIPROCESSING) - case OBJECTS_REMOTE: -#endif - case OBJECTS_ERROR: - break; + if ( the_object == NULL ) { + _Objects_Allocator_unlock(); + return RTEMS_INVALID_ID; } - return RTEMS_INVALID_ID; + _Objects_Set_name( information, the_object, name ); + _Objects_Allocator_unlock(); + return RTEMS_SUCCESSFUL; } |