mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-22 13:25:17 +00:00
bug in the linkedlists macros where the prev node
was improperly managed when doing removals or insertions. also solved issues with app_voicemail init. and reload solves bug #6557 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@10766 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -5898,7 +5898,6 @@ static int load_config(void)
|
||||
}
|
||||
zones = NULL;
|
||||
zonesl = NULL;
|
||||
AST_LIST_HEAD_INIT(&users);
|
||||
memset(ext_pass_cmd, 0, sizeof(ext_pass_cmd));
|
||||
|
||||
if (cfg) {
|
||||
|
@@ -298,9 +298,11 @@ struct { \
|
||||
#define AST_LIST_TRAVERSE_SAFE_BEGIN(head, var, field) { \
|
||||
typeof((head)->first) __list_next; \
|
||||
typeof((head)->first) __list_prev = NULL; \
|
||||
for ((var) = (head)->first, __list_next = (var) ? (var)->field.next : NULL; \
|
||||
typeof((head)->first) __new_prev = NULL; \
|
||||
for ((var) = (head)->first, __new_prev = (var), \
|
||||
__list_next = (var) ? (var)->field.next : NULL; \
|
||||
(var); \
|
||||
__list_prev = (var), (var) = __list_next, \
|
||||
__list_prev = __new_prev, (var) = __list_next, \
|
||||
__list_next = (var) ? (var)->field.next : NULL \
|
||||
)
|
||||
|
||||
@@ -316,6 +318,7 @@ struct { \
|
||||
previous entry, if any).
|
||||
*/
|
||||
#define AST_LIST_REMOVE_CURRENT(head, field) \
|
||||
__new_prev = __list_prev; \
|
||||
if (__list_prev) \
|
||||
__list_prev->field.next = __list_next; \
|
||||
else \
|
||||
@@ -340,7 +343,8 @@ struct { \
|
||||
} else { \
|
||||
(elm)->field.next = (head)->first; \
|
||||
(head)->first = (elm); \
|
||||
} \
|
||||
} \
|
||||
__new_prev = (elm); \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
|
Reference in New Issue
Block a user