[Asterisk-code-review] Fix improper usage of scheduler exposed by 5c713fdf18f (asterisk[13.6])
Matt Jordan
asteriskteam at digium.com
Tue Oct 6 08:30:08 CDT 2015
Matt Jordan has submitted this change and it was merged.
Change subject: Fix improper usage of scheduler exposed by 5c713fdf18f
......................................................................
Fix improper usage of scheduler exposed by 5c713fdf18f
When 5c713fdf18f was merged, it allowed for scheduled items to have an ID of
'0' returned. While this was valid per the documentation for the API, it was
apparently never returned previously. As a result, several users of the
scheduler API viewed the result as being invalid, causing them to reschedule
already scheduled items or otherwise fail in interesting ways.
This patch corrects the users such that they view '0' as valid, and a returned
ID of -1 as being invalid.
Note that the failing HEP RTCP tests now pass with this patch. These tests
failed due to a duplicate scheduling of the RTCP transmissions.
ASTERISK-25449 #close
Change-Id: I019a9aa8b6997584f66876331675981ac9e07e39
---
M channels/chan_sip.c
M channels/chan_skinny.c
M res/res_rtp_asterisk.c
3 files changed, 17 insertions(+), 17 deletions(-)
Approvals:
Anonymous Coward #1000019: Verified
Matt Jordan: Looks good to me, approved
Joshua Colp: Looks good to me, but someone else must approve
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 89fe3f0..384e843 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -4318,7 +4318,7 @@
}
p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, dialog_ref(p, "setting ref as passing into ast_sched_add for __sip_autodestruct"));
- if (p->stimer && p->stimer->st_active == TRUE && p->stimer->st_schedid > 0) {
+ if (p->stimer && p->stimer->st_active == TRUE && p->stimer->st_schedid > -1) {
stop_session_timer(p);
}
}
@@ -22739,7 +22739,7 @@
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
} else if (ast_test_flag(&p->flags[0], SIP_NEEDREINVITE)) {
/* if we can't REINVITE, hold it for later */
- if (p->pendinginvite || p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA || p->waitid > 0) {
+ if (p->pendinginvite || p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA || p->waitid > -1) {
ast_debug(2, "NOT Sending pending reinvite (yet) on '%s'\n", p->callid);
} else {
ast_debug(2, "Sending pending reinvite on '%s'\n", p->callid);
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 3d2d2e8..23a4835 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -4863,7 +4863,7 @@
{
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - Dialer called from SCHED %d\n", sub->callid, sub->dialer_sched);
- sub->dialer_sched = 0;
+ sub->dialer_sched = -1;
skinny_dialer(sub, 1);
return 0;
}
@@ -4872,7 +4872,7 @@
{
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
skinny_locksub(sub);
- sub->aa_sched = 0;
+ sub->aa_sched = -1;
setsubstate(sub, SKINNY_CONNECTED);
skinny_unlocksub(sub);
return 0;
@@ -4882,7 +4882,7 @@
{
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
struct skinny_line *l = sub->line;
- sub->cfwd_sched = 0;
+ sub->cfwd_sched = -1;
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - CFWDNOANS to %s.\n", sub->callid, l->call_forward_noanswer);
ast_channel_call_forward_set(sub->owner, l->call_forward_noanswer);
ast_queue_control(sub->owner, AST_CONTROL_REDIRECTING);
@@ -4924,7 +4924,7 @@
skinny_locksub(sub);
AST_LIST_TRAVERSE(ast_channel_varshead(ast), current, entries) {
if (!(strcmp(ast_var_name(current), "SKINNY_AUTOANSWER"))) {
- if (d->hookstate == SKINNY_ONHOOK && !sub->aa_sched) {
+ if (d->hookstate == SKINNY_ONHOOK && sub->aa_sched < 0) {
char buf[24];
int aatime;
char *stringp = buf, *curstr;
@@ -5389,9 +5389,9 @@
sub->xferor = 0;
sub->related = NULL;
sub->calldirection = direction;
- sub->aa_sched = 0;
- sub->dialer_sched = 0;
- sub->cfwd_sched = 0;
+ sub->aa_sched = -1;
+ sub->dialer_sched = -1;
+ sub->cfwd_sched = -1;
sub->dialType = DIALTYPE_NORMAL;
sub->getforward = 0;
@@ -5550,17 +5550,17 @@
if (sub->dialer_sched) {
skinny_sched_del(sub->dialer_sched, sub);
- sub->dialer_sched = 0;
+ sub->dialer_sched = -1;
}
if (state != SUBSTATE_RINGIN && sub->aa_sched) {
skinny_sched_del(sub->aa_sched, sub);
- sub->aa_sched = 0;
+ sub->aa_sched = -1;
sub->aa_beep = 0;
sub->aa_mute = 0;
}
- if (sub->cfwd_sched) {
+ if (sub->cfwd_sched > -1) {
if (state == SUBSTATE_CONNECTED) {
if (skinny_sched_del(sub->cfwd_sched, sub)) {
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - trying to change state from %s to %s, but already forwarded because no answer.\n",
@@ -5568,7 +5568,7 @@
skinny_unlocksub(sub);
return;
}
- sub->cfwd_sched = 0;
+ sub->cfwd_sched = -1;
} else if (state == SUBSTATE_ONHOOK) {
skinny_sched_del(sub->cfwd_sched, sub);
}
@@ -6240,7 +6240,7 @@
if ((sub->owner && ast_channel_state(sub->owner) < AST_STATE_UP)) {
if (sub->dialer_sched && !skinny_sched_del(sub->dialer_sched, sub)) {
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - Got a digit and not timed out, so try dialing\n", sub->callid);
- sub->dialer_sched = 0;
+ sub->dialer_sched = -1;
len = strlen(sub->exten);
if (len == 0) {
transmit_stop_tone(d, l->instance, sub->callid);
@@ -7077,7 +7077,7 @@
d->name, instance, callreference);
if (sub->dialer_sched && !skinny_sched_del(sub->dialer_sched, sub)) {
size_t len;
- sub->dialer_sched = 0;
+ sub->dialer_sched = -1;
len = strlen(sub->exten);
if (len > 0) {
sub->exten[len-1] = '\0';
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 371c01d..733e84d 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -3311,7 +3311,7 @@
rtp->txcount++;
rtp->txoctetcount += (res - hdrlen);
- if (rtp->rtcp && rtp->rtcp->schedid < 1) {
+ if (rtp->rtcp && rtp->rtcp->schedid < 0) {
ast_debug(1, "Starting RTCP transmission on RTP instance '%p'\n", instance);
ao2_ref(instance, +1);
rtp->rtcp->schedid = ast_sched_add(rtp->sched, ast_rtcp_calc_interval(rtp), ast_rtcp_write, instance);
@@ -4522,7 +4522,7 @@
}
/* Do not schedule RR if RTCP isn't run */
- if (rtp->rtcp && !ast_sockaddr_isnull(&rtp->rtcp->them) && rtp->rtcp->schedid < 1) {
+ if (rtp->rtcp && !ast_sockaddr_isnull(&rtp->rtcp->them) && rtp->rtcp->schedid < 0) {
/* Schedule transmission of Receiver Report */
ao2_ref(instance, +1);
rtp->rtcp->schedid = ast_sched_add(rtp->sched, ast_rtcp_calc_interval(rtp), ast_rtcp_write, instance);
--
To view, visit https://gerrit.asterisk.org/1381
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I019a9aa8b6997584f66876331675981ac9e07e39
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 13.6
Gerrit-Owner: Matt Jordan <mjordan at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>
More information about the asterisk-code-review
mailing list