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