Join ms_merge_and_clear_ms() and ms_merge_old_ms()
While at it, improve logging of the merge action
Change-Id: I39d9eac159448fc3c3a4db9e1b9c5364e906a78f
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index bf4d08a..f1b0c6a 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -402,9 +402,17 @@
ms->imsi[0] = '\0';
}
-static void ms_merge_old_ms(struct GprsMs *ms, struct GprsMs *old_ms)
+/* Merge 'old_ms' object into 'ms' object.
+ * 'old_ms' may be freed during the call to this function, don't use the pointer to it afterwards */
+void ms_merge_and_clear_ms(struct GprsMs *ms, struct GprsMs *old_ms)
{
+ char old_ms_name[128];
OSMO_ASSERT(old_ms != ms);
+ ms_ref(old_ms);
+
+ ms_name_buf(old_ms, old_ms_name, sizeof(old_ms_name));
+
+ LOGPMS(ms, DRLCMAC, LOGL_INFO, "Merge MS: %s\n", old_ms_name);
if (strlen(ms_imsi(ms)) == 0 && strlen(ms_imsi(old_ms)) != 0)
osmo_strlcpy(ms->imsi, ms_imsi(old_ms), sizeof(ms->imsi));
@@ -417,14 +425,6 @@
llc_queue_move_and_merge(&ms->llc_queue, &old_ms->llc_queue);
- ms_reset(old_ms);
-}
-
-void ms_merge_and_clear_ms(struct GprsMs *ms, struct GprsMs *old_ms)
-{
- OSMO_ASSERT(old_ms != ms);
-
- ms_ref(old_ms);
/* Clean up the old MS object */
/* TODO: Use timer? */
@@ -433,7 +433,7 @@
if (ms_dl_tbf(old_ms) && !tbf_timers_pending((struct gprs_rlcmac_tbf *)ms_dl_tbf(old_ms), T_MAX))
tbf_free((struct gprs_rlcmac_tbf *)ms_dl_tbf(old_ms));
- ms_merge_old_ms(ms, old_ms);
+ ms_reset(old_ms);
ms_unref(old_ms);
}