diff options
author | Daniel Willmann <dwillmann@sysmocom.de> | 2018-03-14 18:31:33 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-03-19 20:28:11 +0000 |
commit | 04a2a3231f8c300e27e0d8309acef081ed58d80f (patch) | |
tree | 27f8aa4e05c145b3c789026153626a3f15173e05 | |
parent | d86055b431275cedb73bce32cb18dfc41dff0d15 (diff) |
fsm: Update the name as well if the id is updated and accept NULL
If the name stays the same the log messages will still log with the old
id. Since we can now change the id we need to update the name as well.
NULL as id was allowed before so we should allow that as well.
Change-Id: I6b01eb10b8a05fee3e4a5cdefdcf3ce9f79545b4
-rw-r--r-- | src/fsm.c | 36 | ||||
-rw-r--r-- | tests/fsm/fsm_test.c | 4 |
2 files changed, 26 insertions, 14 deletions
@@ -214,9 +214,30 @@ int osmo_fsm_inst_update_id(struct osmo_fsm_inst *fi, const char *id) } osmo_talloc_replace_string(fi, (char **)&fi->id, id); + if (fi->name) + talloc_free((void*)fi->name); + + if (!fsm_log_addr) { + fi->name = talloc_asprintf(fi, "%s(%s)", fi->fsm->name, id); + } else { + fi->name = talloc_asprintf(fi, "%s(%s)[%p]", fi->fsm->name, id, fi); + } + return 0; } - return -EINVAL; + + if (fi->id) + talloc_free((void*)fi->id); + fi->id = NULL; + if (fi->name) + talloc_free((void*)fi->name); + + if (!fsm_log_addr) { + fi->name = talloc_asprintf(fi, "%s", fi->fsm->name); + } else { + fi->name = talloc_asprintf(fi, "%s[%p]", fi->fsm->name, fi); + } + return 0; } /*! allocate a new instance of a specified FSM @@ -244,19 +265,6 @@ struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void } } - if (!fsm_log_addr) { - if (id) - fi->name = talloc_asprintf(fi, "%s(%s)", fsm->name, id); - else - fi->name = talloc_asprintf(fi, "%s", fsm->name); - } else { - if (id) - fi->name = talloc_asprintf(fi, "%s(%s)[%p]", fsm->name, - id, fi); - else - fi->name = talloc_asprintf(fi, "%s[%p]", fsm->name, fi); - } - INIT_LLIST_HEAD(&fi->proc.children); INIT_LLIST_HEAD(&fi->proc.child); llist_add(&fi->list, &fsm->instances); diff --git a/tests/fsm/fsm_test.c b/tests/fsm/fsm_test.c index f70b0b5c..d7b08aec 100644 --- a/tests/fsm/fsm_test.c +++ b/tests/fsm/fsm_test.c @@ -196,6 +196,10 @@ int main(int argc, char **argv) finst = foo(); OSMO_ASSERT(osmo_fsm_inst_find_by_id(&fsm, "my_id") == finst); OSMO_ASSERT(osmo_fsm_inst_find_by_name(&fsm, "Test_FSM(my_id)") == finst); + OSMO_ASSERT(osmo_fsm_inst_update_id(finst, "another_id") == 0); + OSMO_ASSERT(osmo_fsm_inst_find_by_id(&fsm, "another_id") == finst); + OSMO_ASSERT(osmo_fsm_inst_find_by_name(&fsm, "Test_FSM(another_id)") == finst); + OSMO_ASSERT(osmo_fsm_inst_update_id(finst, "my_id") == 0); while (1) { osmo_select_main(0); |