mirror of https://gerrit.osmocom.org/libosmocore
Add osmo_fsm_find_by_name() and avoid registering FSM with same name
This addresses a FIXME in the fsm.c code: osmo_fsm_register() should fail in case a FSM with the given name already exists. Change-Id: I5fd882939859c79581eba70c14cbafd64560b583
This commit is contained in:
parent
addeaa39b1
commit
8808bb49a2
|
@ -140,6 +140,7 @@ void osmo_fsm_log_addr(bool log_addr);
|
||||||
|
|
||||||
int osmo_fsm_register(struct osmo_fsm *fsm);
|
int osmo_fsm_register(struct osmo_fsm *fsm);
|
||||||
void osmo_fsm_unregister(struct osmo_fsm *fsm);
|
void osmo_fsm_unregister(struct osmo_fsm *fsm);
|
||||||
|
struct osmo_fsm *osmo_fsm_find_by_name(const char *name);
|
||||||
struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void *priv,
|
struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void *priv,
|
||||||
int log_level, const char *id);
|
int log_level, const char *id);
|
||||||
struct osmo_fsm_inst *osmo_fsm_inst_alloc_child(struct osmo_fsm *fsm,
|
struct osmo_fsm_inst *osmo_fsm_inst_alloc_child(struct osmo_fsm *fsm,
|
||||||
|
|
14
src/fsm.c
14
src/fsm.c
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <osmocom/core/fsm.h>
|
#include <osmocom/core/fsm.h>
|
||||||
#include <osmocom/core/talloc.h>
|
#include <osmocom/core/talloc.h>
|
||||||
|
@ -102,6 +103,16 @@ void osmo_fsm_log_addr(bool log_addr)
|
||||||
fsm_log_addr = log_addr;
|
fsm_log_addr = log_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct osmo_fsm *osmo_fsm_find_by_name(const char *name)
|
||||||
|
{
|
||||||
|
struct osmo_fsm *fsm;
|
||||||
|
llist_for_each_entry(fsm, &g_fsms, list) {
|
||||||
|
if (!strcmp(name, fsm->name))
|
||||||
|
return fsm;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief register a FSM with the core
|
/*! \brief register a FSM with the core
|
||||||
*
|
*
|
||||||
* A FSM descriptor needs to be registered with the core before any
|
* A FSM descriptor needs to be registered with the core before any
|
||||||
|
@ -112,7 +123,8 @@ void osmo_fsm_log_addr(bool log_addr)
|
||||||
*/
|
*/
|
||||||
int osmo_fsm_register(struct osmo_fsm *fsm)
|
int osmo_fsm_register(struct osmo_fsm *fsm)
|
||||||
{
|
{
|
||||||
/* FIXME:check for duplicate name? */
|
if (osmo_fsm_find_by_name(fsm->name))
|
||||||
|
return -EEXIST;
|
||||||
llist_add_tail(&fsm->list, &g_fsms);
|
llist_add_tail(&fsm->list, &g_fsms);
|
||||||
INIT_LLIST_HEAD(&fsm->instances);
|
INIT_LLIST_HEAD(&fsm->instances);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue