summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Peeler <jpeeler@digium.com>2009-07-22 22:42:33 +0000
committerJeff Peeler <jpeeler@digium.com>2009-07-22 22:42:33 +0000
commit58699809a5715619d5885b075d52d47998538ede (patch)
treee76a53c87749f501c817fc302f99891f1738822b
parentd223e3636f240ca8bf78563d804e9a6e830e1427 (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
-rw-r--r--channels/chan_dahdi.c59
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 */