diff --git a/libgomp/target.c b/libgomp/target.c index e38cc3b6f1c..4b7233307cd 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -3319,5 +3319,6 @@ gomp_target_rev (uint64_t fn_ptr, uint64_t mapnum, uint64_t devaddrs_ptr, gomp_mutex_lock (&devicep->lock); n = gomp_map_lookup_rev (&devicep->mem_map_rev, &k); - gomp_mutex_unlock (&devicep->lock); + if (devicep->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM) + gomp_mutex_unlock (&devicep->lock); if (n == NULL) @@ -3409,5 +3410,4 @@ gomp_target_rev (uint64_t fn_ptr, uint64_t mapnum, uint64_t devaddrs_ptr, cdata = gomp_alloca (sizeof (*cdata) * mapnum); memset (cdata, '\0', sizeof (*cdata) * mapnum); - gomp_mutex_lock (&devicep->lock); for (uint64_t i = 0; i < mapnum; i++) { @@ -3643,4 +3643,5 @@ gomp_target_rev (uint64_t fn_ptr, uint64_t mapnum, uint64_t devaddrs_ptr, uint64_t struct_cpy = 0; bool clean_struct = false; + gomp_mutex_lock (&devicep->lock); for (uint64_t i = 0; i < mapnum; i++) { @@ -3695,5 +3696,5 @@ gomp_target_rev (uint64_t fn_ptr, uint64_t mapnum, uint64_t devaddrs_ptr, gomp_aligned_free ((void *) (uintptr_t) devaddrs[i]); } - + gomp_mutex_unlock (&devicep->lock); free (devaddrs); free (sizes);