diff options
-rw-r--r-- | src/cl_mem.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/cl_mem.c b/src/cl_mem.c index 36ef2ce2..99554f3b 100644 --- a/src/cl_mem.c +++ b/src/cl_mem.c @@ -1070,16 +1070,19 @@ cl_mem_delete(cl_mem mem) } /* Remove it from the list */ - assert(mem->ctx); - pthread_mutex_lock(&mem->ctx->buffer_lock); - if (mem->prev) - mem->prev->next = mem->next; - if (mem->next) - mem->next->prev = mem->prev; - if (mem->ctx->buffers == mem) - mem->ctx->buffers = mem->next; - pthread_mutex_unlock(&mem->ctx->buffer_lock); - cl_context_delete(mem->ctx); + if (mem->ctx) { + pthread_mutex_lock(&mem->ctx->buffer_lock); + if (mem->prev) + mem->prev->next = mem->next; + if (mem->next) + mem->next->prev = mem->prev; + if (mem->ctx->buffers == mem) + mem->ctx->buffers = mem->next; + pthread_mutex_unlock(&mem->ctx->buffer_lock); + cl_context_delete(mem->ctx); + } else { + assert((mem->prev == 0) && (mem->next == 0)); + } /* Someone still mapped, unmap */ if(mem->map_ref > 0) { |