diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-06-05 11:48:57 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-06-07 17:06:43 +0200 |
commit | 2d2352bab92c51c2fd857b9555242545bd08c95e (patch) | |
tree | de11a05e5b361a161e93c98866aa704ed24ed3ae /cpukit/posix/src/pthreadequal.c | |
parent | score: Add _Objects_Put_for_get_isr_disable() (diff) | |
download | rtems-2d2352bab92c51c2fd857b9555242545bd08c95e.tar.bz2 |
score: Add and use _Objects_Put()
Add and use _Objects_Put_without_thread_dispatch(). These two functions
pair with the _Objects_Get() function. This helps to introduce object
specific SMP locks to avoid lock contention.
Diffstat (limited to 'cpukit/posix/src/pthreadequal.c')
-rw-r--r-- | cpukit/posix/src/pthreadequal.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/cpukit/posix/src/pthreadequal.c b/cpukit/posix/src/pthreadequal.c index 199cc8fb9a..9b2b0282ed 100644 --- a/cpukit/posix/src/pthreadequal.c +++ b/cpukit/posix/src/pthreadequal.c @@ -41,8 +41,10 @@ int pthread_equal( #ifndef RTEMS_DEBUG return _Objects_Are_ids_equal( t1, t2 ); #else - int status; - Objects_Locations location; + int status; + Objects_Locations location; + Thread_Control *thread_1; + Thread_Control *thread_2; /* * By default this is not a match. @@ -54,7 +56,7 @@ int pthread_equal( * Validate the first id and return 0 if it is not valid */ - (void) _Thread_Get( t1, &location ); + thread_1 = _Thread_Get( t1, &location ); switch ( location ) { case OBJECTS_LOCAL: @@ -63,21 +65,21 @@ int pthread_equal( * Validate the second id and return 0 if it is not valid */ - (void) _Thread_Get( t2, &location ); + thread_2 = _Thread_Get( t2, &location ); switch ( location ) { case OBJECTS_LOCAL: status = _Objects_Are_ids_equal( t1, t2 ); - _Thread_Unnest_dispatch(); - _Thread_Enable_dispatch(); - break; + _Objects_Put_without_thread_dispatch( &thread_2->Object ); + _Objects_Put( &thread_1->Object ); + break; case OBJECTS_ERROR: #if defined(RTEMS_MULTIPROCESSING) case OBJECTS_REMOTE: #endif /* t1 must have been valid so exit the critical section */ - _Thread_Enable_dispatch(); + _Objects_Put( &thread_1->Object ); /* return status == 0 */ break; } |