Merged revisions 284779-284780 via svnmerge from
authorRichard Mudgett <rmudgett@digium.com>
Thu, 2 Sep 2010 21:08:41 +0000 (21:08 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 2 Sep 2010 21:08:41 +0000 (21:08 +0000)
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

channels/chan_dahdi.c
channels/sig_pri.c
channels/sig_pri.h

index 25246cd..7e532fc 100644 (file)
@@ -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) */
index c427996..c75badd 100644 (file)
@@ -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)) {
index 5a770ce..98b05b9 100644 (file)
@@ -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) */