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
diff --git a/src/fsm.c b/src/fsm.c
index 342542f..c5256da 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -214,9 +214,30 @@
 		}
 		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 @@
 		}
 	}
 
-	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);