diff options
author | Jeff Peeler <jpeeler@digium.com> | 2009-07-22 22:42:33 +0000 |
---|---|---|
committer | Jeff Peeler <jpeeler@digium.com> | 2009-07-22 22:42:33 +0000 |
commit | 58699809a5715619d5885b075d52d47998538ede (patch) | |
tree | e76a53c87749f501c817fc302f99891f1738822b /channels/chan_dahdi.c | |
parent | d223e3636f240ca8bf78563d804e9a6e830e1427 (diff) |
Reset the fax buffers back to default settings regardless of signaling in use -
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
Diffstat (limited to 'channels/chan_dahdi.c')
-rw-r--r-- | channels/chan_dahdi.c | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 3270de648..5065043a4 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -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 */ |