aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_iax2.c
diff options
context:
space:
mode:
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r--channels/chan_iax2.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index dd6749c8e..79c121b6b 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -6387,23 +6387,24 @@ static int socket_read(int *id, int fd, short events, void *cbdata)
fh = (struct ast_iax2_full_hdr *) thread->buf;
if (ntohs(fh->scallno) & IAX_FLAG_FULL) {
struct iax2_thread *cur = NULL;
+ uint16_t callno = ntohs(fh->scallno) & ~IAX_FLAG_FULL;
AST_LIST_LOCK(&active_list);
AST_LIST_TRAVERSE(&active_list, cur, list) {
- if ((cur->ffinfo.callno == ntohs(fh->scallno)) &&
+ if ((cur->ffinfo.callno == callno) &&
!inaddrcmp(&cur->ffinfo.sin, &thread->iosin))
break;
}
if (cur) {
/* we found another thread processing a full frame for this call,
so queue it up for processing later. */
- defer_full_frame(thread);
+ defer_full_frame(cur);
AST_LIST_UNLOCK(&active_list);
insert_idle_thread(thread);
return 1;
} else {
/* this thread is going to process this frame, so mark it */
- thread->ffinfo.callno = ntohs(fh->scallno);
+ thread->ffinfo.callno = callno;
memcpy(&thread->ffinfo.sin, &thread->iosin, sizeof(thread->ffinfo.sin));
thread->ffinfo.type = fh->type;
thread->ffinfo.csub = fh->csub;