From 9feddb7edfc95b6864e5f594211bd94d54d4ab46 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Mon, 20 Aug 2018 10:54:15 +0200 Subject: measurement: make sure state is reset on chan act. At the moment only lchan_meas_reset is reset on channel activation. All other states are not reset. This may lead to irretations in the first measurement interval if there are still leftover messages from a previous connection. Lets ensure everything is reset to zero by zeroing out the whole .meas struct in struct lchan. - Add a centralized function that does the reset - Call that function from rsl_tx_chan_act_ack() in rsl.c Change-Id: I880ae3030df6dcd60c32b7144c3430528429bdea Related: OS#2975 Related: OS#2987 --- src/common/measurement.c | 8 ++++++++ src/common/rsl.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/common/measurement.c b/src/common/measurement.c index a75b54da..bd2c0b79 100644 --- a/src/common/measurement.c +++ b/src/common/measurement.c @@ -490,3 +490,11 @@ void lchan_meas_process_measurement(struct gsm_lchan *lchan, struct bts_ul_meas * measurment report at Meas period End */ lchan_meas_check_compute(lchan, fn); } + +/* Reset all measurement related struct members to their initial values. This + * function will be called every time an lchan is activated to ensure the + * measurement process starts with a defined state. */ +void lchan_meas_reset(struct gsm_lchan *lchan) +{ + memset(&lchan->meas, 0, sizeof(lchan->meas)); +} diff --git a/src/common/rsl.c b/src/common/rsl.c index a24c444e..ff2d9977 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -750,7 +750,7 @@ static int rsl_tx_chan_act_ack(struct gsm_lchan *lchan) msg->trx = lchan->ts->trx; /* since activation was successful, do some lchan initialization */ - lchan->meas.res_nr = 0; + lchan_meas_reset(lchan); return abis_bts_rsl_sendmsg(msg); } -- cgit v1.2.3