forked from Imagelibrary/rtems
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.
This commit is contained in:
@@ -74,14 +74,16 @@ static rtems_id pipe_semaphore = RTEMS_ID_NONE;
|
||||
/* Set barriers to be interruptible by signals. */
|
||||
static void pipe_interruptible(pipe_control_t *pipe)
|
||||
{
|
||||
Objects_Locations location;
|
||||
Objects_Locations location;
|
||||
Barrier_Control *the_barrier;
|
||||
|
||||
_Barrier_Get(pipe->readBarrier, &location)->Barrier.Wait_queue.state
|
||||
|= STATES_INTERRUPTIBLE_BY_SIGNAL;
|
||||
_Thread_Enable_dispatch();
|
||||
_Barrier_Get(pipe->writeBarrier, &location)->Barrier.Wait_queue.state
|
||||
|= STATES_INTERRUPTIBLE_BY_SIGNAL;
|
||||
_Thread_Enable_dispatch();
|
||||
the_barrier = _Barrier_Get(pipe->readBarrier, &location);
|
||||
the_barrier->Barrier.Wait_queue.state |= STATES_INTERRUPTIBLE_BY_SIGNAL;
|
||||
_Objects_Put( &the_barrier->Object );
|
||||
|
||||
the_barrier = _Barrier_Get(pipe->writeBarrier, &location);
|
||||
the_barrier->Barrier.Wait_queue.state |= STATES_INTERRUPTIBLE_BY_SIGNAL;
|
||||
_Objects_Put( &the_barrier->Object );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user