diff --git a/ChangeLog b/ChangeLog index faf36b438f..f80ba3df45 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-04-26 Wim Taymans + + * 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 * gst/gstpad.c: (gst_pad_set_active), (gst_pad_peer_set_active), diff --git a/gst/gsttrashstack.h b/gst/gsttrashstack.h index 9c66499fae..bd67e619c0 100644 --- a/gst/gsttrashstack.h +++ b/gst/gsttrashstack.h @@ -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)