summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fsm.c36
-rw-r--r--tests/fsm/fsm_test.c4
2 files changed, 26 insertions, 14 deletions
diff --git a/src/fsm.c b/src/fsm.c
index 342542fb..c5256da5 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -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);