Hi,

  I can confirm the bug and this patch fixes it.

  Basicaly it crashed in cogl_onscreen_add_frame_callback because
macro COGL_TAILQ_REMOVE in cogl_onscreen_remove_frame_callback
incorrectly removed an element from queue and corrupted the queue and
tail pointer.

--- a/cogl/cogl-queue.h         2011-08-12 15:45:58.000000000 +0200
+++ b/cogl/cogl-queue.h 2013-03-29 01:06:20.049909221 +0100
@@ -614,14 +614,18 @@
         COGL_QMD_SAVELINK(oldprev, (elm)->field.tqe_prev);              \
         COGL_QMD_TAILQ_CHECK_NEXT(elm, field);                          \
         COGL_QMD_TAILQ_CHECK_PREV(elm, field);                          \
-        if ((COGL_TAILQ_NEXT((elm), field)) != NULL)                    \
+        (*(elm)->field.tqe_prev)->field.tqe_next =                      \
+                COGL_TAILQ_NEXT((elm), field);                          \
+        if ((COGL_TAILQ_NEXT((elm), field)) != NULL) {                  \
                 COGL_TAILQ_NEXT((elm), field)->field.tqe_prev =         \
                     (elm)->field.tqe_prev;                              \
-        else {                                                          \
+            if (COGL_TAILQ_NEXT((elm), field)->field.tqe_next == NULL)  \
+                (head)->tqh_last =                                      \
+                    &(*(elm)->field.tqe_prev)->field.tqe_next;          \
+        } else {                                                        \
                 (head)->tqh_last = (elm)->field.tqe_prev;               \
                 COGL_QMD_TRACE_HEAD(head);                              \
         }                                                               \
-        *(elm)->field.tqe_prev = COGL_TAILQ_NEXT((elm), field);         \
         COGL_TRASHIT(*oldnext);                                         \
         COGL_TRASHIT(*oldprev);                                         \
         COGL_QMD_TRACE_ELEM(&(elm)->field);                             \

--nX


-- 
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to