diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-08 05:28:47 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-08 05:28:47 +0000 |
commit | a45a413db3bdce126d5cb28ed49b776fdebb4b1d (patch) | |
tree | 444ea944312fd31b5524ee43f8cfc97e2884c6de /channels | |
parent | beabbf77e66fbdd59fdcb5e12dade8039fd0b683 (diff) |
improve linked-list macros in two ways:
- the *_CURRENT macros no longer need the list head pointer argument
- add AST_LIST_MOVE_CURRENT to encapsulate the remove/add operation when moving entries between lists
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@89106 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_agent.c | 4 | ||||
-rw-r--r-- | channels/chan_iax2.c | 45 | ||||
-rw-r--r-- | channels/iax2-parser.c | 4 |
3 files changed, 22 insertions, 31 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 70c2b9d93..342f46754 100644 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -1152,7 +1152,7 @@ static int read_agent_config(int reload) } AST_LIST_TRAVERSE_SAFE_BEGIN(&agents, p, list) { if (p->dead) { - AST_LIST_REMOVE_CURRENT(&agents, list); + AST_LIST_REMOVE_CURRENT(list); /* Destroy if appropriate */ if (!p->owner) { if (!p->chan) { @@ -1166,7 +1166,7 @@ static int read_agent_config(int reload) } } } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&agents); ast_config_destroy(cfg); return 1; diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index dded09177..0e3a8f78d 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -1918,10 +1918,10 @@ static void reload_firmware(int unload) AST_LIST_TRAVERSE_SAFE_BEGIN(&firmwares, cur, list) { if (!cur->dead) continue; - AST_LIST_REMOVE_CURRENT(&firmwares, list); + AST_LIST_REMOVE_CURRENT(list); destroy_firmware(cur); } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&firmwares); } @@ -6127,7 +6127,7 @@ static int complete_dpreply(struct chan_iax2_pvt *pvt, struct iax_ies *ies) AST_LIST_TRAVERSE_SAFE_BEGIN(&dpcache, dp, peer_list) { if (strcmp(dp->exten, exten)) continue; - AST_LIST_REMOVE_CURRENT(&dpcache, peer_list); + AST_LIST_REMOVE_CURRENT(peer_list); dp->callno = 0; dp->expiry.tv_sec = dp->orig.tv_sec + expiry; if (dp->flags & CACHE_FLAG_PENDING) { @@ -6140,7 +6140,7 @@ static int complete_dpreply(struct chan_iax2_pvt *pvt, struct iax_ies *ies) if (dp->waiters[x] > -1) write(dp->waiters[x], "asdf", 4); } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&dpcache); return 0; @@ -6908,7 +6908,7 @@ static int timing_read(int *id, int fd, short events, void *cbdata) if (!drop && iax2_trunk_expired(tpeer, &now)) { /* Take it out of the list, but don't free it yet, because it could be in use */ - AST_LIST_REMOVE_CURRENT(&tpeers, list); + AST_LIST_REMOVE_CURRENT(list); drop = tpeer; } else { res = send_trunk(tpeer, &now); @@ -6920,7 +6920,7 @@ static int timing_read(int *id, int fd, short events, void *cbdata) res = 0; ast_mutex_unlock(&tpeer->lock); } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&tpeers); if (drop) { @@ -7209,7 +7209,7 @@ static void defer_full_frame(struct iax2_thread *from_here, struct iax2_thread * AST_LIST_TRAVERSE_SAFE_BEGIN(&to_here->full_frames, cur_pkt_buf, entry) { cur_fh = (struct ast_iax2_full_hdr *) cur_pkt_buf->buf; if (fh->oseqno < cur_fh->oseqno) { - AST_LIST_INSERT_BEFORE_CURRENT(&to_here->full_frames, pkt_buf, entry); + AST_LIST_INSERT_BEFORE_CURRENT(pkt_buf, entry); break; } } @@ -7478,12 +7478,12 @@ static int acf_iaxvar_write(struct ast_channel *chan, const char *cmd, char *dat AST_LIST_LOCK(varlist); AST_LIST_TRAVERSE_SAFE_BEGIN(varlist, var, entries) { if (strcmp(var->name, data) == 0) { - AST_LIST_REMOVE_CURRENT(varlist, entries); + AST_LIST_REMOVE_CURRENT(entries); ast_var_delete(var); break; } } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; var = ast_var_assign(data, value); if (var) AST_LIST_INSERT_TAIL(varlist, var, entries); @@ -9538,7 +9538,7 @@ static void *network_thread(void *ignore) if (f->retries < 0) { /* This is not supposed to be retransmitted */ - AST_LIST_REMOVE_CURRENT(&frame_queue, list); + AST_LIST_REMOVE_CURRENT(list); /* Free the iax frame */ iax_frame_free(f); } else { @@ -9547,7 +9547,7 @@ static void *network_thread(void *ignore) f->retrans = iax2_sched_add(sched, f->retrytime, attempt_transmit, f); } } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&frame_queue); pthread_testcancel(); @@ -10832,7 +10832,7 @@ static struct iax2_dpcache *find_cache(struct ast_channel *chan, const char *dat AST_LIST_TRAVERSE_SAFE_BEGIN(&dpcache, dp, cache_list) { if (ast_tvcmp(tv, dp->expiry) > 0) { - AST_LIST_REMOVE_CURRENT(&dpcache, cache_list); + AST_LIST_REMOVE_CURRENT(cache_list); if ((dp->flags & CACHE_FLAG_PENDING) || dp->callno) ast_log(LOG_WARNING, "DP still has peer field or pending or callno (flags = %d, peer = blah, callno = %d)\n", dp->flags, dp->callno); else @@ -10842,7 +10842,7 @@ static struct iax2_dpcache *find_cache(struct ast_channel *chan, const char *dat if (!strcmp(dp->peercontext, data) && !strcmp(dp->exten, exten)) break; } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; if (!dp) { /* No matching entry. Create a new one. */ @@ -11420,27 +11420,18 @@ static int __unload_module(void) /* Call for all threads to halt */ AST_LIST_LOCK(&idle_list); - AST_LIST_TRAVERSE_SAFE_BEGIN(&idle_list, thread, list) { - AST_LIST_REMOVE_CURRENT(&idle_list, list); + while ((thread = AST_LIST_REMOVE_HEAD(&idle_list, list))) pthread_cancel(thread->threadid); - } - AST_LIST_TRAVERSE_SAFE_END - AST_LIST_UNLOCK(&idle_list); + AST_LIST_UNLOCK(&idle_list); AST_LIST_LOCK(&active_list); - AST_LIST_TRAVERSE_SAFE_BEGIN(&active_list, thread, list) { - AST_LIST_REMOVE_CURRENT(&active_list, list); + while ((thread = AST_LIST_REMOVE_HEAD(&active_list, list))) pthread_cancel(thread->threadid); - } - AST_LIST_TRAVERSE_SAFE_END - AST_LIST_UNLOCK(&active_list); + AST_LIST_UNLOCK(&active_list); AST_LIST_LOCK(&dynamic_list); - AST_LIST_TRAVERSE_SAFE_BEGIN(&dynamic_list, thread, list) { - AST_LIST_REMOVE_CURRENT(&dynamic_list, list); + while ((thread = AST_LIST_REMOVE_HEAD(&dynamic_list, list))) pthread_cancel(thread->threadid); - } - AST_LIST_TRAVERSE_SAFE_END AST_LIST_UNLOCK(&dynamic_list); /* Wait for threads to exit */ diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index 0422ab67f..a2ec42508 100644 --- a/channels/iax2-parser.c +++ b/channels/iax2-parser.c @@ -1003,13 +1003,13 @@ struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheab AST_LIST_TRAVERSE_SAFE_BEGIN(iax_frames, fr, list) { if (fr->afdatalen >= datalen) { size_t afdatalen = fr->afdatalen; - AST_LIST_REMOVE_CURRENT(iax_frames, list); + AST_LIST_REMOVE_CURRENT(list); memset(fr, 0, sizeof(*fr)); fr->afdatalen = afdatalen; break; } } - AST_LIST_TRAVERSE_SAFE_END + AST_LIST_TRAVERSE_SAFE_END; } if (!fr) { if (!(fr = ast_calloc_cache(1, sizeof(*fr) + datalen))) |