gsm: Do not attempt to release SAPI=0 if it was never allocated

In case of handover (but probably on RACH) we would send a RLL for
SAPI=0 even if this SAPI was never established. After we have released
all SAPI>0 locally check that SAPI=0 is established and if not release
the rf channel directly.
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 6e1ce78..42dad7f 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -2141,3 +2141,25 @@
 	osmo_timer_schedule(&lchan->T3109, bts->network->T3109, 0);
 	return 0;
 }
+
+/**
+ * \brief directly RF Channel Release the lchan
+ *
+ * When no SAPI was allocated, directly release the logical channel. This
+ * should only be called from chan_alloc.c on channel release handling. In
+ * case no SAPI was established the RF Channel can be directly released,
+ */
+int rsl_direct_rf_release(struct gsm_lchan *lchan)
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(lchan->sapis); ++i) {
+		if (lchan->sapis[i] != LCHAN_SAPI_UNUSED) {
+			LOGP(DRSL, LOGL_ERROR, "%s SAPI(%d) still allocated.\n",
+				gsm_lchan_name(lchan), i);
+			return -1;
+		}
+	}
+
+	/* Now release it */
+	return rsl_rf_chan_release(lchan, 0, SACCH_NONE);
+}