[rtems commit] score: Avoid Giant lock in _Objects_Id_to_name()

Sebastian Huber sebh at rtems.org
Tue May 12 09:32:17 UTC 2015


Module:    rtems
Branch:    master
Commit:    47c9c083ede43f9dfbd86212f308244aa19bfad3
Changeset: http://git.rtems.org/rtems/commit/?id=47c9c083ede43f9dfbd86212f308244aa19bfad3

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue May 12 10:53:47 2015 +0200

score: Avoid Giant lock in _Objects_Id_to_name()

This prevents a deadlock situation in the capture engine.

---

 cpukit/score/src/objectidtoname.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/cpukit/score/src/objectidtoname.c b/cpukit/score/src/objectidtoname.c
index ec26185..674f641 100644
--- a/cpukit/score/src/objectidtoname.c
+++ b/cpukit/score/src/objectidtoname.c
@@ -31,6 +31,7 @@ Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
   Objects_Information *information;
   Objects_Control     *the_object = (Objects_Control *) 0;
   Objects_Locations    ignored_location;
+  ISR_lock_Context     lock_context;
 
   /*
    *  Caller is trusted for name != NULL.
@@ -56,11 +57,16 @@ Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
       return OBJECTS_INVALID_ID;
   #endif
 
-  the_object = _Objects_Get( information, tmpId, &ignored_location );
+  the_object = _Objects_Get_isr_disable(
+    information,
+    tmpId,
+    &ignored_location,
+    &lock_context
+  );
   if ( !the_object )
     return OBJECTS_INVALID_ID;
 
   *name = the_object->name;
-  _Objects_Put( the_object );
+  _ISR_lock_ISR_enable( &lock_context );
   return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
 }



More information about the vc mailing list