summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-27 16:46:57 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-02 07:46:15 +0200
commitf4d541ccfe6a6e64a06cbf89bc7b03e045f62281 (patch)
treed908f904d9faf3536acb6184727749103faaa3f9
parentrtems: Avoid Giant lock for semaphores (diff)
downloadrtems-f4d541ccfe6a6e64a06cbf89bc7b03e045f62281.tar.bz2
rtems: Avoid Giant lock in rtems_object_set_name()
Update #2555.
-rw-r--r--cpukit/rtems/src/rtemsobjectsetname.c26
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;
}