Blob Blame History Raw
From 638b0c3a37d599876b83faf42df79079512193a2 Mon Sep 17 00:00:00 2001
From: Michal Babej <michal.babej@tut.fi>
Date: Tue, 9 Jan 2018 13:57:47 +0100
Subject: [PATCH 07/14] Fix a potential data race in
 pocl_memalign_alloc_global_mem()

---
 lib/CL/devices/common.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/CL/devices/common.c b/lib/CL/devices/common.c
index 9895f1ae..f90d2321 100644
--- a/lib/CL/devices/common.c
+++ b/lib/CL/devices/common.c
@@ -1063,21 +1063,25 @@ void*
 pocl_memalign_alloc_global_mem(cl_device_id device, size_t align, size_t size)
 {
   pocl_global_mem_t *mem = device->global_memory;
+  void *retval = NULL;
+
+  POCL_LOCK (mem->pocl_lock);
   if ((mem->total_alloc_limit - mem->currently_allocated) < size)
-    return NULL;
+    goto ERROR;
 
-  void* ptr = pocl_memalign_alloc(align, size);
-  if (!ptr)
-    return NULL;
+  retval = pocl_memalign_alloc (align, size);
+  if (!retval)
+    goto ERROR;
 
-  POCL_LOCK (mem->pocl_lock);
   mem->currently_allocated += size;
   if (mem->max_ever_allocated < mem->currently_allocated)
     mem->max_ever_allocated = mem->currently_allocated;
   assert(mem->currently_allocated <= mem->total_alloc_limit);
+
+ERROR:
   POCL_UNLOCK (mem->pocl_lock);
 
-  return ptr;
+  return retval;
 }
 
 void
-- 
2.15.1