From ab01a1569d4cf1155c3910e44ed32e0f70aafd9f Mon Sep 17 00:00:00 2001 From: Ruiling Song Date: Thu, 31 Oct 2013 11:01:21 +0800 Subject: [PATCH] runtime: Fix a dangling pointer issue ctx->events points to the head of 'event list' under the ctx. When deleting an event from the list, we should also update the head pointer besides updating its neighbour's next & prev, Signed-off-by: Ruiling Song Reviewedy-by: "Xing, Homer" --- src/cl_event.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cl_event.c b/src/cl_event.c index 212f1ee..1dc02ae 100644 --- a/src/cl_event.c +++ b/src/cl_event.c @@ -124,12 +124,15 @@ void cl_event_delete(cl_event event) /* Remove it from the list */ assert(event->ctx); pthread_mutex_lock(&event->ctx->event_lock); - if (event->prev) - event->prev->next = event->next; - if (event->next) - event->next->prev = event->prev; - if (event->prev == NULL && event->next == NULL) - event->ctx->events = NULL; + + if (event->prev) + event->prev->next = event->next; + if (event->next) + event->next->prev = event->prev; + /* if this is the head, update head pointer ctx->events */ + if (event->ctx->events == event) + event->ctx->events = event->next; + pthread_mutex_unlock(&event->ctx->event_lock); cl_context_delete(event->ctx); -- 2.7.4