gst/gsttrashstack.h: Ooohh. a nasty one! After having a failed pop() from the stack...
authorWim Taymans <wim.taymans@gmail.com>
Tue, 26 Apr 2005 18:07:45 +0000 (18:07 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Tue, 26 Apr 2005 18:07:45 +0000 (18:07 +0000)
Original commit message from CVS:
* gst/gsttrashstack.h:
Ooohh. a nasty one! After having a failed pop() from the stack,
it's possible that the stack is empty. In that case, don't
follow the NULL pointer.

ChangeLog
gst/gsttrashstack.h

index faf36b4..f80ba3d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-04-26  Wim Taymans  <wim@fluendo.com>
+
+       * gst/gsttrashstack.h:
+       Ooohh. a nasty one! After having a failed pop() from the stack,
+       it's possible that the stack is empty. In that case, don't
+       follow the NULL pointer.
+
 2005-04-25  Wim Taymans  <wim@fluendo.com>
 
        * gst/gstpad.c: (gst_pad_set_active), (gst_pad_peer_set_active),
index 9c66499..bd67e61 100644 (file)
@@ -110,7 +110,9 @@ gst_trash_stack_pop (GstTrashStack *stack)
     "  incl %%ecx;              \n\t"  /* and increment */
     SMP_LOCK "cmpxchg8b %1;     \n\t"  /* if eax:edx == *stack, move ebx:ecx to *stack,
                                         * else *stack is moved into eax:edx again... */
-    "  jnz 10b;                 \n\t"  /* ... and we retry */
+    "  jz 20f;                  \n\t"   /* success */
+    "  testl %%eax, %%eax;      \n\t"   /* if (head == NULL) return */
+    "  jnz 10b;                 \n\t"   /* else we retry */
     "20:                        \n\t"
     "  popl %%ebx               \n"
       : "=a" (head)