[Asterisk-code-review] openr2(2/6): Stop polling channels when DAHDI returns -ENODEV (e.g: p... (...asterisk[16])
George Joseph
asteriskteam at digium.com
Tue Jul 23 14:25:51 CDT 2019
George Joseph has submitted this change and it was merged. ( https://gerrit.asterisk.org/c/asterisk/+/11604 )
Change subject: openr2(2/6): Stop polling channels when DAHDI returns -ENODEV (e.g: plug-out)
......................................................................
openr2(2/6): Stop polling channels when DAHDI returns -ENODEV (e.g: plug-out)
Otherwise, OpenR2 threads go crazy and consume almost all CPU resources
Change-Id: I10a41f617613fe7399c5bdced5c64a2751173f28
Signed-off-by: Oron Peled <oron.peled at xorcom.com>
---
M channels/chan_dahdi.c
1 file changed, 16 insertions(+), 0 deletions(-)
Approvals:
Kevin Harwell: Looks good to me, but someone else must approve
Joshua Colp: Looks good to me, but someone else must approve
George Joseph: Looks good to me, approved; Approved for Submit
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index f204e3c..79b2b5d 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -748,6 +748,7 @@
openr2_context_t *protocol_context; /*!< OpenR2 context handle */
struct dahdi_pvt *pvts[SIG_MFCR2_MAX_CHANNELS]; /*!< Member channel pvt structs */
int numchans; /*!< Number of channels in this R2 block */
+ int nodev; /*!< Link disconnected? */
struct dahdi_mfcr2_conf conf; /*!< Configuration used to setup this pseudo-link */
};
@@ -3636,7 +3637,19 @@
static void dahdi_r2_on_os_error(openr2_chan_t *r2chan, int errorcode)
{
+ struct dahdi_pvt *p = openr2_chan_get_client_data(r2chan);
+
ast_log(LOG_ERROR, "OS error on chan %d: %s\n", openr2_chan_get_number(r2chan), strerror(errorcode));
+ ast_mutex_lock(&p->lock);
+ /* Disconnected? */
+ if (errorcode == ENODEV) {
+ struct dahdi_mfcr2 *r2link = p->mfcr2;
+ p->mfcr2call = 0;
+ if (r2link) {
+ r2link->nodev = 1;
+ }
+ }
+ ast_mutex_unlock(&p->lock);
}
static void dahdi_r2_on_protocol_error(openr2_chan_t *r2chan, openr2_protocol_error_t reason)
@@ -13748,6 +13761,9 @@
if (mfcr2->pvts[i]->owner) {
continue;
}
+ if (mfcr2->nodev) {
+ continue;
+ }
if (!mfcr2->pvts[i]->r2chan) {
ast_debug(1, "Wow, no r2chan on channel %d\n", mfcr2->pvts[i]->channel);
quit_loop = 1;
--
To view, visit https://gerrit.asterisk.org/c/asterisk/+/11604
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-Change-Id: I10a41f617613fe7399c5bdced5c64a2751173f28
Gerrit-Change-Number: 11604
Gerrit-PatchSet: 2
Gerrit-Owner: Oron Peled <oron.peled at xorcom.com>
Gerrit-Reviewer: Friendly Automation
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
Gerrit-Reviewer: Tzafrir Cohen <tzafrir.cohen at xorcom.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20190723/69251260/attachment.html>
More information about the asterisk-code-review
mailing list