[MERGED] libosmocore[master]: timer: add osmo_timer_setup()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Pablo Neira Ayuso gerrit-no-reply at lists.osmocom.org
Wed May 10 09:11:28 UTC 2017


Pablo Neira Ayuso has submitted this change and it was merged.

Change subject: timer: add osmo_timer_setup()
......................................................................


timer: add osmo_timer_setup()

Add a new function timer function to set up the timer, similar to what
we have in the Linux kernel. This patch also converts existing opencoded
timer setup in the libosmocore tree as initial client of this new
function.

This patch implicitly removes function callback passed by reference that
defeat compile time type validation.

Compile-tested only, but I ran make check that reports success when
testing timer infrastructure.

Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666
---
M include/osmocom/core/timer.h
M src/fsm.c
M src/gb/gprs_bssgp.c
M src/gb/gprs_ns.c
M src/gsm/gsm0411_smc.c
M src/gsm/gsm0411_smr.c
M src/gsm/lapd_core.c
M src/rate_ctr.c
M src/stats.c
M src/timer.c
M tests/timer/timer_test.c
11 files changed, 26 insertions(+), 22 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/core/timer.h b/include/osmocom/core/timer.h
index dbda13f..48e7d8d 100644
--- a/include/osmocom/core/timer.h
+++ b/include/osmocom/core/timer.h
@@ -65,6 +65,8 @@
  * timer management
  */
 
+void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), void *data);
+
 void osmo_timer_add(struct osmo_timer_list *timer);
 
 void osmo_timer_schedule(struct osmo_timer_list *timer, int seconds, int microseconds);
diff --git a/src/fsm.c b/src/fsm.c
index 9e6ef15..5e74482 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -206,8 +206,7 @@
 	fi->fsm = fsm;
 	fi->priv = priv;
 	fi->log_level = log_level;
-	fi->timer.data = fi;
-	fi->timer.cb = fsm_tmr_cb;
+	osmo_timer_setup(&fi->timer, fsm_tmr_cb, fi);
 	if (id)
 		fi->id = talloc_strdup(fi, id);
 
diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c
index dba4d5c..fdbf788 100644
--- a/src/gb/gprs_bssgp.c
+++ b/src/gb/gprs_bssgp.c
@@ -640,8 +640,7 @@
 		msecs = (fcqe->llc_pdu_len * 1000) / fc->bucket_leak_rate;
 		/* FIXME: add that time to fc->time_last_pdu and subtract it from
 		 * current time */
-		fc->timer.data = fc;
-		fc->timer.cb = &fc_timer_cb;
+		osmo_timer_setup(&fc->timer, fc_timer_cb, fc);
 		osmo_timer_schedule(&fc->timer, msecs / 1000, (msecs % 1000) * 1000);
 	} else {
 		/* If the PCU is telling us to not send any more data at all,
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 7b497c2..9a2a114 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -238,8 +238,7 @@
 	/* before RESET procedure: BLOCKED and DEAD */
 	nsvc->state = NSE_S_BLOCKED;
 	nsvc->nsi = nsi;
-	nsvc->timer.cb = gprs_ns_timer_cb;
-	nsvc->timer.data = nsvc;
+	osmo_timer_setup(&nsvc->timer, gprs_ns_timer_cb, nsvc);
 	nsvc->ctrg = rate_ctr_group_alloc(nsvc, &nsvc_ctrg_desc, nsvci);
 	nsvc->statg = osmo_stat_item_group_alloc(nsvc, &nsvc_statg_desc, nsvci);
 
diff --git a/src/gsm/gsm0411_smc.c b/src/gsm/gsm0411_smc.c
index c44423d..4c08365 100644
--- a/src/gsm/gsm0411_smc.c
+++ b/src/gsm/gsm0411_smc.c
@@ -184,8 +184,7 @@
 	/* 5.2.3.1.2: enter MO-wait for CP-ACK */
 	/* 5.2.3.2.3: enter MT-wait for CP-ACK */
 	new_cp_state(inst, GSM411_CPS_WAIT_CP_ACK);
-	inst->cp_timer.data = inst;
-	inst->cp_timer.cb = cp_timer_expired;
+	osmo_timer_setup(&inst->cp_timer, cp_timer_expired, inst);
 	/* 5.3.2.1: Set Timer TC1A */
 	osmo_timer_schedule(&inst->cp_timer, inst->cp_tc1, 0);
 	/* clone cp_msg */
diff --git a/src/gsm/gsm0411_smr.c b/src/gsm/gsm0411_smr.c
index a1ee980..6d7fb8b 100644
--- a/src/gsm/gsm0411_smr.c
+++ b/src/gsm/gsm0411_smr.c
@@ -77,8 +77,7 @@
 	inst->rp_state = GSM411_RPS_IDLE;
 	inst->rl_recv = rl_recv;
 	inst->mn_send = mn_send;
-	inst->rp_timer.data = inst;
-	inst->rp_timer.cb = rp_timer_expired;
+	osmo_timer_setup(&inst->rp_timer, rp_timer_expired, inst);
 
 	LOGP(DLSMS, LOGL_INFO,
 		SMR_LOG_STR "instance created for %s.\n",
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index e0bbcab..c81b2a0 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -267,12 +267,10 @@
 	dl->n200 = 3;
 	dl->t200_sec = 1;
 	dl->t200_usec = 0;
-	dl->t200.data = dl;
-	dl->t200.cb = &lapd_t200_cb;
+	osmo_timer_setup(&dl->t200, lapd_t200_cb, dl);
 	dl->t203_sec = 10;
 	dl->t203_usec = 0;
-	dl->t203.data = dl;
-	dl->t203.cb = &lapd_t203_cb;
+	osmo_timer_setup(&dl->t203, lapd_t203_cb, dl);
 	dl->maxf = maxf;
 	if (k > v_range - 1)
 		k = v_range - 1;
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index f995f3f..3ccd065 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -147,7 +147,7 @@
 int rate_ctr_init(void *tall_ctx)
 {
 	tall_rate_ctr_ctx = tall_ctx;
-	rate_ctr_timer.cb = rate_ctr_timer_cb;
+	osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL);
 	osmo_timer_schedule(&rate_ctr_timer, 1, 0);
 
 	return 0;
diff --git a/src/stats.c b/src/stats.c
index 1efc8cd..dee5d81 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -107,7 +107,7 @@
 	if (!is_initialised)
 		return -ESRCH;
 
-	osmo_stats_timer.cb = osmo_stats_timer_cb;
+	osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL);
 	osmo_timer_schedule(&osmo_stats_timer, 0, 1);
 
 	return 0;
diff --git a/src/timer.c b/src/timer.c
index cc6d5cc..47d1786 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -65,6 +65,18 @@
         rb_insert_color(&timer->node, &timer_root);
 }
 
+/*! \brief set up timer callback and data
+ *  \param[in] timer the timer that should be added
+ *  \param[in] callback function to be called when timer expires
+ *  \param[in] pointer to data that passed to the callback function
+ */
+void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data),
+		      void *data)
+{
+	timer->cb	= cb;
+	timer->data	= data;
+}
+
 /*! \brief add a new timer to the timer management
  *  \param[in] timer the timer that should be added
  */
diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c
index 066dc72..d2b0204 100644
--- a/tests/timer/timer_test.c
+++ b/tests/timer/timer_test.c
@@ -39,10 +39,7 @@
 static void secondary_timer_fired(void *data);
 
 static unsigned int main_timer_step = 0;
-static struct osmo_timer_list main_timer = {
-	.cb = main_timer_fired,
-	.data = &main_timer_step,
-};
+static struct osmo_timer_list main_timer;
 
 static LLIST_HEAD(timer_test_list);
 
@@ -92,8 +89,7 @@
 			return;
 		}
 		osmo_gettimeofday(&v->start, NULL);
-		v->timer.cb = secondary_timer_fired;
-		v->timer.data = v;
+		osmo_timer_setup(&v->timer, secondary_timer_fired, v);
 		unsigned int seconds = (i & 0x7) + 1;
 		v->stop.tv_sec = v->start.tv_sec + seconds;
 		v->stop.tv_usec = v->start.tv_usec;
@@ -195,6 +191,7 @@
 	       " %d steps of %d msecs each\n",
 	       timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000);
 
+	osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step);
 	osmo_timer_schedule(&main_timer, 1, 0);
 
 #ifdef HAVE_SYS_SELECT_H

-- 
To view, visit https://gerrit.osmocom.org/2542
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666
Gerrit-PatchSet: 6
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Pablo Neira Ayuso <pablo at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Pablo Neira Ayuso <pablo at gnumonks.org>



More information about the gerrit-log mailing list