bsc_api: Operate on the subscriber connection for subscriber management
diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h
index 0653996..527056b 100644
--- a/openbsc/include/openbsc/gsm_subscriber.h
+++ b/openbsc/include/openbsc/gsm_subscriber.h
@@ -82,7 +82,7 @@
 struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net,
 					unsigned long long id);
 int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
-void subscr_put_channel(struct gsm_lchan *lchan);
+void subscr_put_channel(struct gsm_subscriber_connection *conn);
 void subscr_get_channel(struct gsm_subscriber *subscr,
                         int type, gsm_cbfn *cbfn, void *param);
 
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 9d65333..dbb1fb5 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -124,10 +124,10 @@
  */
 static void gsm411_release_conn(struct gsm_subscriber_connection *conn)
 {
-	if (!conn->lchan)
+	if (!conn)
 		return;
 
-	subscr_put_channel(conn->lchan);
+	subscr_put_channel(conn);
 }
 
 struct msgb *gsm411_msgb_alloc(void)
diff --git a/openbsc/src/gsm_subscriber_base.c b/openbsc/src/gsm_subscriber_base.c
index c0d1261..264f128 100644
--- a/openbsc/src/gsm_subscriber_base.c
+++ b/openbsc/src/gsm_subscriber_base.c
@@ -185,9 +185,8 @@
 	}
 }
 
-void subscr_put_channel(struct gsm_lchan *lchan)
+void subscr_put_channel(struct gsm_subscriber_connection *conn)
 {
-	struct gsm_subscriber_connection *conn = &lchan->conn;
 	/*
 	 * FIXME: Continue with other requests now... by checking
 	 * the gsm_subscriber inside the gsm_lchan. Drop the ref count
@@ -208,7 +207,7 @@
 
 	put_subscr_con(conn);
 
-	if (lchan->conn.subscr && !llist_empty(&lchan->conn.subscr->requests))
-		subscr_send_paging_request(lchan->conn.subscr);
+	if (conn->subscr && !llist_empty(&conn->subscr->requests))
+		subscr_send_paging_request(conn->subscr);
 }