From 23fec9f0e18dc4913fab818118f836af150b98f3 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 27 Mar 2014 14:16:12 +0100 Subject: score: PR2152: Use allocator mutex for objects Use allocator mutex for objects allocate/free. This prevents that the thread dispatch latency depends on the workspace/heap fragmentation. --- cpukit/posix/src/semopen.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'cpukit/posix/src/semopen.c') diff --git a/cpukit/posix/src/semopen.c b/cpukit/posix/src/semopen.c index 20e2e92c7b..0b98ca60f9 100644 --- a/cpukit/posix/src/semopen.c +++ b/cpukit/posix/src/semopen.c @@ -66,8 +66,6 @@ sem_t *sem_open( Objects_Locations location; size_t name_len; - _Thread_Disable_dispatch(); - if ( oflag & O_CREAT ) { va_start(arg, oflag); mode = va_arg( arg, mode_t ); @@ -75,6 +73,7 @@ sem_t *sem_open( va_end(arg); } + _Objects_Allocator_lock(); status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id, &name_len ); /* @@ -92,7 +91,7 @@ sem_t *sem_open( */ if ( !( status == ENOENT && (oflag & O_CREAT) ) ) { - _Thread_Enable_dispatch(); + _Objects_Allocator_unlock(); rtems_set_errno_and_return_minus_one_cast( status, sem_t * ); } } else { @@ -102,14 +101,14 @@ sem_t *sem_open( */ if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) { - _Thread_Enable_dispatch(); + _Objects_Allocator_unlock(); rtems_set_errno_and_return_minus_one_cast( EEXIST, sem_t * ); } the_semaphore = _POSIX_Semaphore_Get( (sem_t *) &the_semaphore_id, &location ); the_semaphore->open_count += 1; _Thread_Enable_dispatch(); - _Thread_Enable_dispatch(); + _Objects_Allocator_unlock(); goto return_id; } @@ -130,7 +129,7 @@ sem_t *sem_open( * errno was set by Create_support, so don't set it again. */ - _Thread_Enable_dispatch(); + _Objects_Allocator_unlock(); if ( status == -1 ) return SEM_FAILED; -- cgit v1.2.3