[Asterisk-code-review] Fix improper usage of scheduler exposed by 5c713fdf18f (asterisk[certified/13.1])
Matt Jordan
asteriskteam at digium.com
Mon Oct 5 22:07:23 CDT 2015
Matt Jordan has uploaded a new change for review.
https://gerrit.asterisk.org/1382
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.
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(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/82/1382/1
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a269541..76803a4 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -4357,7 +4357,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);
}
}
@@ -22631,7 +22631,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 23f7ad1..499a7ef 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -4875,7 +4875,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;
}
@@ -4884,7 +4884,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;
@@ -4894,7 +4894,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);
@@ -4936,7 +4936,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;
@@ -5401,9 +5401,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;
@@ -5562,17 +5562,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",
@@ -5580,7 +5580,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);
}
@@ -6252,7 +6252,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);
@@ -7089,7 +7089,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 7595ab3..f3f6b4b 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -3229,7 +3229,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);
@@ -4440,7 +4440,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/1382
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I019a9aa8b6997584f66876331675981ac9e07e39
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: certified/13.1
Gerrit-Owner: Matt Jordan <mjordan at digium.com>
More information about the asterisk-code-review
mailing list