aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/src/bssap.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/openbsc/src/bssap.c b/openbsc/src/bssap.c
index dbb7e8808..4f8efd817 100644
--- a/openbsc/src/bssap.c
+++ b/openbsc/src/bssap.c
@@ -1071,6 +1071,20 @@ static int bssap_handle_lchan_signal(unsigned int subsys, unsigned int signal,
case S_LCHAN_ACTIVATE_ACK:
continue_new_assignment(lchan);
break;
+ case S_LCHAN_ACTIVATE_NACK:
+ if (lchan->msc_data && lchan->msc_data->secondary_lchan == lchan) {
+ LOGP(DMSC, LOGL_ERROR, "Activating a secondary lchan failed.\n");
+
+ /*
+ * The channel will be freed, so let us forget about it, T10 will
+ * fire and we will send the assignment failure to the network. We
+ * do not give up the refcount so we will get another unexpected
+ * release... but that will be handled just fine.
+ */
+ lchan->msc_data->secondary_lchan = NULL;
+ lchan->msc_data = NULL;
+ }
+ break;
}
break;
}