Bug 5965 - major bug in AST_LIST_REMOVE
authorTilghman Lesher <tilghman@meg.abyt.es>
Sun, 11 Dec 2005 01:26:09 +0000 (01:26 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Sun, 11 Dec 2005 01:26:09 +0000 (01:26 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7428 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/linkedlists.h

index cfe8462..f687189 100644 (file)
@@ -424,15 +424,16 @@ struct {                                                          \
 #define AST_LIST_REMOVE(head, elm, field) do {                         \
        if ((head)->first == (elm)) {                                   \
                (head)->first = (elm)->field.next;                      \
-       }                                                               \
-       else {                                                          \
+               if ((head)->last = (elm))                       \
+                       (head)->last = NULL;                    \
+       } else {                                                                \
                typeof(elm) curelm = (head)->first;                     \
                while (curelm->field.next != (elm))                     \
                        curelm = curelm->field.next;                    \
                curelm->field.next = (elm)->field.next;                 \
+               if ((head)->last == curelm->field.next)                 \
+                       (head)->last = curelm;                          \
        }                                                               \
-       if ((head)->last == elm)                                        \
-               (head)->last = NULL;                                    \
 } while (0)
 
 #endif /* _ASTERISK_LINKEDLISTS_H */