From: Junyan He <junyan...@intel.com>

1. Call finish before we destroy the command queue.
   We should make sure all the commands in the queue are
   finished before we really destroy the command_queue.
   If not, may cause event status error. We leave the queue's
   life time to user and do not ref the queue when create
   event.
2. Loose the assert condition when notify queue.
   We have the case when ref of the queue is 0 but still need
   to notify.

Signed-off-by: Junyan He <junyan...@intel.com>
---
 src/cl_command_queue.c         | 3 +++
 src/cl_command_queue_enqueue.c | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/cl_command_queue.c b/src/cl_command_queue.c
index aa371d0..b855ff6 100644
--- a/src/cl_command_queue.c
+++ b/src/cl_command_queue.c
@@ -81,6 +81,9 @@ cl_command_queue_delete(cl_command_queue queue)
   if (CL_OBJECT_DEC_REF(queue) > 1)
     return;
 
+  /* Before we destroy the queue, we should make sure all
+     the commands in the queue are finished. */
+  cl_command_queue_wait_finish(queue);
   cl_context_remove_queue(queue->ctx, queue);
 
   cl_command_queue_destroy_enqueue(queue);
diff --git a/src/cl_command_queue_enqueue.c b/src/cl_command_queue_enqueue.c
index 91fabf9..44a0761 100644
--- a/src/cl_command_queue_enqueue.c
+++ b/src/cl_command_queue_enqueue.c
@@ -122,7 +122,7 @@ cl_command_queue_notify(cl_command_queue queue)
     return;
   }
 
-  assert(CL_OBJECT_IS_COMMAND_QUEUE(queue));
+  assert(queue && (((cl_base_object)queue)->magic == 
CL_OBJECT_COMMAND_QUEUE_MAGIC));
   CL_OBJECT_LOCK(queue);
   queue->worker.cookie++;
   CL_OBJECT_NOTIFY_COND(queue);
-- 
2.7.4

_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to