As previously noted, when cl_mem_allocate fails, its error handling then
calls cl_mem_delete on the incompletely-set-up buffer, which aborts at
assert(mem->ctx).
This patch appears to fix the problem, but be warned I don't know this
code well enough to know what else it might break.
Signed-off-by: Rebecca Palmer <rebecca_pal...@zoho.com>
diff --git a/src/cl_mem.c b/src/cl_mem.c
index 2ec89a4..99d8381 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -1071,16 +1071,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) {
_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet