From 02afe465bfdbc381a7c174b0d83b4720d7d18fe9 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 30 May 2013 14:12:48 +0200 Subject: HO: Add a penalty timer list to the subscriber connection entity This penalty timer is used to temporarily block cells where handover or assignment failed or where handover is not allowed. This is usefull to prevent repeated handover attempts to broken cells or cells that have limited allowed distance. Change-Id: I95cb7e3211b2470b773965e7aa94d8eb6c8c1a3a --- src/libbsc/bsc_api.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/libbsc/bsc_api.c b/src/libbsc/bsc_api.c index bd55dfc5c..236163bc1 100644 --- a/src/libbsc/bsc_api.c +++ b/src/libbsc/bsc_api.c @@ -262,12 +262,15 @@ struct gsm_subscriber_connection *bsc_subscr_con_allocate(struct gsm_lchan *lcha conn->lchan = lchan; conn->bts = lchan->ts->trx->bts; lchan->conn = conn; + INIT_LLIST_HEAD(&conn->ho_penalty_timers); llist_add_tail(&conn->entry, &net->subscr_conns); return conn; } void bsc_subscr_con_free(struct gsm_subscriber_connection *conn) { + struct ho_penalty_timer *penalty; + if (!conn) return; @@ -289,6 +292,13 @@ void bsc_subscr_con_free(struct gsm_subscriber_connection *conn) conn->secondary_lchan->conn = NULL; } + /* flush handover penalty timers */ + while ((penalty = llist_first_entry_or_null(&conn->ho_penalty_timers, + struct ho_penalty_timer, entry))) { + llist_del(&penalty->entry); + talloc_free(penalty); + } + llist_del(&conn->entry); talloc_free(conn); } -- cgit v1.2.3