From: Richard Mudgett Date: Thu, 2 Sep 2010 21:08:41 +0000 (+0000) Subject: Merged revisions 284779-284780 via svnmerge from X-Git-Tag: 11.0.0-beta1~2382 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3403dbf3741bb3d5f057289a204ea2d11d41b9df;p=thirdparty%2Fasterisk.git Merged revisions 284779-284780 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r284779 | rmudgett | 2010-09-02 15:59:12 -0500 (Thu, 02 Sep 2010) | 8 lines Made output libpri event names if pri debugging is enabled when sig_pri processes them. * Simplified CLI "pri debug xx span xx" command code and removed redundant debugging enabled messages. * Made CLI "pri debug xx span xx" command only close the debugging log file if it was opened. ........ r284780 | rmudgett | 2010-09-02 16:02:54 -0500 (Thu, 02 Sep 2010) | 2 lines Simplified pri_dchannel() poll timeout duration code. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@284782 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 25246cd566..7e532fc677 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -13734,25 +13734,36 @@ static char *handle_pri_debug(struct ast_cli_entry *e, int cmd, struct ast_cli_a ast_cli(a->fd, "No PRI running on span %d\n", span); return CLI_SUCCESS; } + + /* Set debug level in libpri */ for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) { - if (pris[span-1].pri.dchans[x]) { - if (level == 1) { - pri_set_debug(pris[span-1].pri.dchans[x], SIG_PRI_DEBUG_NORMAL); - ast_cli(a->fd, "Enabled debugging on span %d\n", span); - } else if (level == 0) { - pri_set_debug(pris[span-1].pri.dchans[x], 0); - /* close the file if it's set */ - ast_mutex_lock(&pridebugfdlock); - close(pridebugfd); - pridebugfd = -1; - ast_cli(a->fd, "PRI debug output to file disabled\n"); - ast_mutex_unlock(&pridebugfdlock); - } else { - pri_set_debug(pris[span-1].pri.dchans[x], SIG_PRI_DEBUG_INTENSE); - ast_cli(a->fd, "Enabled debugging on span %d\n", span); + if (pris[span - 1].pri.dchans[x]) { + switch (level) { + case 0: + pri_set_debug(pris[span - 1].pri.dchans[x], 0); + break; + case 1: + pri_set_debug(pris[span - 1].pri.dchans[x], SIG_PRI_DEBUG_NORMAL); + break; + default: + pri_set_debug(pris[span - 1].pri.dchans[x], SIG_PRI_DEBUG_INTENSE); + break; } } } + if (level == 0) { + /* Close the debugging file if it's set */ + ast_mutex_lock(&pridebugfdlock); + if (0 <= pridebugfd) { + close(pridebugfd); + pridebugfd = -1; + ast_cli(a->fd, "Disabled PRI debug output to file '%s'\n", + pridebugfilename); + } + ast_mutex_unlock(&pridebugfdlock); + } + pris[span - 1].pri.debug = (level) ? 1 : 0; + ast_cli(a->fd, "%s debugging on span %d\n", (level) ? "Enabled" : "Disabled", span); return CLI_SUCCESS; } #endif /* defined(HAVE_PRI) */ @@ -13969,7 +13980,7 @@ static char *handle_pri_show_debug(struct ast_cli_entry *e, int cmd, struct ast_ int x; int span; int count=0; - int debug=0; + int debug; switch (cmd) { case CLI_INIT: @@ -13985,7 +13996,6 @@ static char *handle_pri_show_debug(struct ast_cli_entry *e, int cmd, struct ast_ for (span = 0; span < NUM_SPANS; span++) { if (pris[span].pri.pri) { for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) { - debug = 0; if (pris[span].pri.dchans[x]) { debug = pri_get_debug(pris[span].pri.dchans[x]); ast_cli(a->fd, "Span %d: Debug: %s\tIntense: %s\n", span+1, (debug&PRI_DEBUG_Q931_STATE)? "Yes" : "No" ,(debug&PRI_DEBUG_Q921_RAW)? "Yes" : "No" ); @@ -14001,7 +14011,7 @@ static char *handle_pri_show_debug(struct ast_cli_entry *e, int cmd, struct ast_ ast_mutex_unlock(&pridebugfdlock); if (!count) - ast_cli(a->fd, "No debug set or no PRI running\n"); + ast_cli(a->fd, "No PRI running\n"); return CLI_SUCCESS; } #endif /* defined(HAVE_PRI) */ diff --git a/channels/sig_pri.c b/channels/sig_pri.c index c427996246..c75badd664 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -4176,36 +4176,36 @@ static void *pri_dchannel(void *vpri) } } /* Start with reasonable max */ - lowest = ast_tv(60, 0); + if (doidling || pri->resetting) { + /* + * Make sure we stop at least once per second if we're + * monitoring idle channels + */ + lowest = ast_tv(1, 0); + } else { + /* Don't poll for more than 60 seconds */ + lowest = ast_tv(60, 0); + } for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) { - /* Find lowest available d-channel */ - if (!pri->dchans[i]) + if (!pri->dchans[i]) { + /* We scanned all D channels on this span. */ break; - if ((next = pri_schedule_next(pri->dchans[i]))) { + } + next = pri_schedule_next(pri->dchans[i]); + if (next) { /* We need relative time here */ tv = ast_tvsub(*next, ast_tvnow()); if (tv.tv_sec < 0) { - tv = ast_tv(0,0); + /* + * A timer has already expired. + * By definition zero time is the lowest so we can quit early. + */ + lowest = ast_tv(0, 0); + break; } - if (doidling || pri->resetting) { - if (tv.tv_sec > 1) { - tv = ast_tv(1, 0); - } - } else { - if (tv.tv_sec > 60) { - tv = ast_tv(60, 0); - } + if (ast_tvcmp(tv, lowest) < 0) { + lowest = tv; } - } else if (doidling || pri->resetting) { - /* Make sure we stop at least once per second if we're - monitoring idle channels */ - tv = ast_tv(1,0); - } else { - /* Don't poll for more than 60 seconds */ - tv = ast_tv(60, 0); - } - if (!i || ast_tvcmp(tv, lowest) < 0) { - lowest = tv; } } ast_mutex_unlock(&pri->lock); @@ -4243,8 +4243,10 @@ static void *pri_dchannel(void *vpri) ast_log(LOG_WARNING, "pri_event returned error %d (%s)\n", errno, strerror(errno)); if (e) { - if (pri->debug) - pri_dump_event(pri->dchans[which], e); + if (pri->debug) { + ast_verbose("Span: %d Processing event: %s\n", + pri->span, pri_event2str(e->e)); + } if (e->e != PRI_EVENT_DCHAN_DOWN) { if (!(pri->dchanavail[which] & DCHAN_UP)) { diff --git a/channels/sig_pri.h b/channels/sig_pri.h index 5a770ce0b0..98b05b9caf 100644 --- a/channels/sig_pri.h +++ b/channels/sig_pri.h @@ -389,7 +389,7 @@ struct sig_pri_span { int num_call_waiting_calls; #endif /* defined(HAVE_PRI_CALL_WAITING) */ int dchanavail[SIG_PRI_NUM_DCHANS]; /*!< Whether each channel is available */ - int debug; /*!< set to true if to dump PRI event info (tested but never set) */ + int debug; /*!< set to true if to dump PRI event info */ int span; /*!< span number put into user output messages */ int resetting; /*!< true if span is being reset/restarted */ int resetpos; /*!< current position during a reset (-1 if not started) */