mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
This bug has been hanging over my head ever since I wrote this SLA code.
Every time I tried to go debug it by adding some debug output, the behavior would change. It turns out I wasn't crazy. I had the following piece of code: if (remove) AST_LIST_REMOVE_CURRENT(...); Well, AST_LIST_REMOVE_CURRENT was not wrapped in braces, so my conditional statement didn't do much good at all. It always ran at least all of the macro minus the first statement, so I was seeing list entries magically disappear when they weren't supposed to. After many hours of debugging, I have come to this extremely irritating fix. :) (issues #9581, #9497) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@67492 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -513,7 +513,7 @@ struct { \
|
||||
the list traversal (and without having to re-traverse the list to modify the
|
||||
previous entry, if any).
|
||||
*/
|
||||
#define AST_LIST_REMOVE_CURRENT(head, field) \
|
||||
#define AST_LIST_REMOVE_CURRENT(head, field) do { \
|
||||
__new_prev->field.next = NULL; \
|
||||
__new_prev = __list_prev; \
|
||||
if (__list_prev) \
|
||||
@@ -521,7 +521,8 @@ struct { \
|
||||
else \
|
||||
(head)->first = __list_next; \
|
||||
if (!__list_next) \
|
||||
(head)->last = __list_prev;
|
||||
(head)->last = __list_prev; \
|
||||
} while (0)
|
||||
|
||||
#define AST_RWLIST_REMOVE_CURRENT AST_LIST_REMOVE_CURRENT
|
||||
|
||||
|
Reference in New Issue
Block a user