[libpri-commits] rmudgett: branch rmudgett/t312 r2221 - /team/rmudgett/t312/q931.c
SVN commits to the libpri project
libpri-commits at lists.digium.com
Fri Feb 25 17:03:00 CST 2011
Author: rmudgett
Date: Fri Feb 25 17:02:56 2011
New Revision: 2221
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=2221
Log:
Must wait for fake clearing to complete before destroying master call record.
Modified:
team/rmudgett/t312/q931.c
Modified: team/rmudgett/t312/q931.c
URL: http://svnview.digium.com/svn/libpri/team/rmudgett/t312/q931.c?view=diff&rev=2221&r1=2220&r2=2221
==============================================================================
--- team/rmudgett/t312/q931.c (original)
+++ team/rmudgett/t312/q931.c Fri Feb 25 17:02:56 2011
@@ -4348,9 +4348,11 @@
}
if (cur->fake_clearing_timer) {
- /* Ooops! Upper layer likely just lost a B channel. Must fix! */
- pri_error(ctrl, "BAD! Fake clearing timer was still running. cref:%d\n",
- cur->cr);
+ /*
+ * Must wait for the fake clearing to complete before destroying
+ * the master call record.
+ */
+ return;
}
/* Master call or normal call destruction. */
@@ -5753,10 +5755,17 @@
static void pri_fake_clearing_expiry(void *data)
{
- struct q931_call *call = data;/* Call is not a subcall call record. */
-
- call->fake_clearing_timer = 0;
- pri_fake_clearing(call);
+ struct q931_call *master = data;
+
+ master->fake_clearing_timer = 0;
+ pri_fake_clearing(master);
+ if (!master->t312_timer && !q931_get_subcall_count(master)) {
+ /*
+ * T312 has expired and no slaves are left so we can
+ * destroy the master.
+ */
+ q931_destroycall(master->pri, master);
+ }
}
static void pri_create_fake_clearing(struct pri *ctrl, struct q931_call *master)
More information about the libpri-commits
mailing list