diff options
author | sh <sh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-12-02 14:10:33 +0000 |
---|---|---|
committer | sh <sh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-12-02 14:10:33 +0000 |
commit | b85c95b19c7fed12b1284dd0942756c4d9aaf75d (patch) | |
tree | 653fcd1f097ac796d49bea19a3fca4d48bf32f50 /libgomp | |
parent | ccabf72560e94140a5a3ad75dacd27387868a735 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | libgomp/config/rtems/pool.h | 26 |
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; } |