aco_option_register(&cfg_info, "fullname", ACO_EXACT, agent_types, NULL, OPT_STRINGFIELD_T, 0, STRFLDSET(struct agent_cfg, full_name));
if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) {
- goto error;
+ return -1;
}
return 0;
-
-error:
- destroy_config();
- return -1;
}
enum agent_state {
*/
static enum ast_device_state agent_pvt_devstate_get(const char *agent_id)
{
- RAII_VAR(struct agent_pvt *, agent, ao2_find(agents, agent_id, OBJ_KEY), ao2_cleanup);
+ enum ast_device_state dev_state = AST_DEVICE_INVALID;
+ struct agent_pvt *agent;
+ agent = ao2_find(agents, agent_id, OBJ_KEY);
if (agent) {
- return agent->devstate;
+ agent_lock(agent);
+ dev_state = agent->devstate;
+ agent_unlock(agent);
+ ao2_ref(agent, -1);
}
- return AST_DEVICE_INVALID;
+ return dev_state;
}
/*!
}
destroy_config();
- ao2_ref(agents, -1);
+ ao2_cleanup(agents);
agents = NULL;
return 0;
}
if (!agents) {
return AST_MODULE_LOAD_FAILURE;
}
- if (load_config()) {
- ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n");
- ao2_ref(agents, -1);
- agents = NULL;
- return AST_MODULE_LOAD_DECLINE;
- }
/* Init agent holding bridge v_table. */
bridge_init_agent_hold();
unload_module();
return AST_MODULE_LOAD_FAILURE;
}
+
+ if (load_config()) {
+ ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n");
+ unload_module();
+ return AST_MODULE_LOAD_DECLINE;
+ }
+
return AST_MODULE_LOAD_SUCCESS;
}