summaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorsh <sh@138bc75d-0d04-0410-961f-82ee72b054a4>2016-12-02 14:10:33 +0000
committersh <sh@138bc75d-0d04-0410-961f-82ee72b054a4>2016-12-02 14:10:33 +0000
commitb85c95b19c7fed12b1284dd0942756c4d9aaf75d (patch)
tree653fcd1f097ac796d49bea19a3fca4d48bf32f50 /libgomp
parentccabf72560e94140a5a3ad75dacd27387868a735 (diff)
downloadgcc-b85c95b19c7fed12b1284dd0942756c4d9aaf75d.tar.gz
[RTEMS] Fix libgomp for nthreads == 1
libgomp/ * config/rtems/pool.h (gomp_get_thread_pool): Return proper thread pool in case nthreads == 1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243179 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog5
-rw-r--r--libgomp/config/rtems/pool.h26
2 files changed, 16 insertions, 15 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 9e2a3001b86..f072ce49711 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,8 @@
+2016-12-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/rtems/pool.h (gomp_get_thread_pool): Return proper
+ thread pool in case nthreads == 1.
+
2016-11-30 Alexander Monakov <amonakov@ispras.ru>
* config/nvptx/env.c: Delete.
diff --git a/libgomp/config/rtems/pool.h b/libgomp/config/rtems/pool.h
index 7520c071c17..e69eca45dda 100644
--- a/libgomp/config/rtems/pool.h
+++ b/libgomp/config/rtems/pool.h
@@ -87,28 +87,24 @@ static inline struct gomp_thread_pool *
gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
{
struct gomp_thread_pool *pool;
+ struct gomp_thread_pool_reservoir *res;
if (__builtin_expect (thr->thread_pool == NULL, 0))
pthread_setspecific (gomp_thread_destructor, thr);
- if (nthreads != 1)
+ res = gomp_get_thread_pool_reservoir ();
+ if (res != NULL)
{
- struct gomp_thread_pool_reservoir *res =
- gomp_get_thread_pool_reservoir ();
- if (res != NULL)
- {
- gomp_sem_wait (&res->available);
- gomp_mutex_lock (&res->lock);
- pool = res->pools[--res->index];
- gomp_mutex_unlock (&res->lock);
- pool->threads_busy = nthreads;
- thr->thread_pool = pool;
- }
- else
- pool = gomp_get_own_thread_pool (thr, nthreads);
+ gomp_sem_wait (&res->available);
+ gomp_mutex_lock (&res->lock);
+ pool = res->pools[--res->index];
+ gomp_mutex_unlock (&res->lock);
+ pool->threads_busy = nthreads;
+ thr->thread_pool = pool;
}
else
- pool = NULL;
+ pool = gomp_get_own_thread_pool (thr, nthreads);
+
return pool;
}