]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Reset the fax buffers back to default settings regardless of signaling in use -
authorJeff Peeler <jpeeler@digium.com>
Wed, 22 Jul 2009 22:42:33 +0000 (22:42 +0000)
committerJeff Peeler <jpeeler@digium.com>
Wed, 22 Jul 2009 22:42:33 +0000 (22:42 +0000)
Pointed out by Matt F.
Also in the case of not using a signaling module, set the law back to the
default as well.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@208155 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index 3270de648f27bf2c0b78a3d97213a95c2794d516..5065043a434fe456370df4cddafb69b6cef109b5 100644 (file)
@@ -4854,10 +4854,33 @@ static openr2_call_disconnect_cause_t dahdi_ast_cause_to_r2_cause(int cause)
 }
 #endif
 
+static int revert_fax_buffers(struct dahdi_pvt *p, struct ast_channel *ast)
+{
+       if (p->bufferoverrideinuse) {
+               /* faxbuffers are in use, revert them */
+               struct dahdi_bufferinfo bi = {
+                       .txbufpolicy = p->buf_policy,
+                       .rxbufpolicy = p->buf_policy,
+                       .bufsize = p->bufsize,
+                       .numbufs = p->buf_no
+               };
+               int bpres;
+
+               if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
+                       ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
+               }
+               p->bufferoverrideinuse = 0;
+               return bpres;
+       }
+
+       return -1;
+}
+
 static int dahdi_hangup(struct ast_channel *ast)
 {
        int res = 0;
        int idx,x;
+       int law;
        /*static int restore_gains(struct dahdi_pvt *p);*/
        struct dahdi_pvt *p = ast->tech_pvt;
        struct dahdi_pvt *tmp = NULL;
@@ -4877,23 +4900,8 @@ static int dahdi_hangup(struct ast_channel *ast)
                restore_gains(p);
                p->ignoredtmf = 0;
 
-               if (p->bufferoverrideinuse) {
-                       /* faxbuffers are in use, revert them */
-                       struct dahdi_bufferinfo bi = {
-                               .txbufpolicy = p->buf_policy,
-                               .rxbufpolicy = p->buf_policy,
-                               .bufsize = p->bufsize,
-                               .numbufs = p->buf_no
-                       };
-                       int bpres;
-
-                       if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
-                               ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
-                       }
-                       p->bufferoverrideinuse = 0;
-               }
-
                res = analog_hangup(p->sig_pvt, ast);
+               revert_fax_buffers(p, ast);
 
                goto hangup_out;
        }
@@ -4913,6 +4921,7 @@ static int dahdi_hangup(struct ast_channel *ast)
                        ast_dsp_free(p->dsp);
                        p->dsp = NULL;
                }
+               revert_fax_buffers(p, ast);
                dahdi_setlinear(p->subs[SUB_REAL].dfd, 0);
                law = DAHDI_LAW_DEFAULT;
                res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
@@ -5076,22 +5085,10 @@ static int dahdi_hangup(struct ast_channel *ast)
                        p->dsp = NULL;
                }
 
-               if (p->bufferoverrideinuse) {
-                       /* faxbuffers are in use, revert them */
-                       struct dahdi_bufferinfo bi = {
-                               .txbufpolicy = p->buf_policy,
-                               .rxbufpolicy = p->buf_policy,
-                               .bufsize = p->bufsize,
-                               .numbufs = p->buf_no
-                       };
-                       int bpres;
-
-                       if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
-                               ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
-                       }
-                       p->bufferoverrideinuse = 0;
-               }
+               revert_fax_buffers(p, ast);
 
+               law = DAHDI_LAW_DEFAULT;
+               res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
                if (res < 0)
                        ast_log(LOG_WARNING, "Unable to set law on channel %d to default: %s\n", p->channel, strerror(errno));
                /* Perform low level hangup if no owner left */