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
1.4
Russell Bryant 18 years ago
parent 83744c244a
commit fe9a3bef4e

@ -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

Loading…
Cancel
Save