app_queue: Added initialization for "context" parameter
[asterisk/asterisk.git] / apps / app_agent_pool.c
index a36c771..68bcfde 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "asterisk.h"
 
 
 #include "asterisk.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+ASTERISK_REGISTER_FILE()
 
 #include "asterisk/cli.h"
 #include "asterisk/app.h"
 
 #include "asterisk/cli.h"
 #include "asterisk/app.h"
@@ -552,14 +552,10 @@ static int load_config(void)
        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) {
        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;
        }
 
        return 0;
-
-error:
-       destroy_config();
-       return -1;
 }
 
 enum agent_state {
 }
 
 enum agent_state {
@@ -730,12 +726,17 @@ static struct ast_channel *agent_lock_logged(struct agent_pvt *agent)
  */
 static enum ast_device_state agent_pvt_devstate_get(const char *agent_id)
 {
  */
 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) {
        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;
 }
 
 /*!
 }
 
 /*!
@@ -2642,7 +2643,7 @@ static int unload_module(void)
        }
 
        destroy_config();
        }
 
        destroy_config();
-       ao2_ref(agents, -1);
+       ao2_cleanup(agents);
        agents = NULL;
        return 0;
 }
        agents = NULL;
        return 0;
 }
@@ -2656,12 +2657,6 @@ static int load_module(void)
        if (!agents) {
                return AST_MODULE_LOAD_FAILURE;
        }
        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();
 
        /* Init agent holding bridge v_table. */
        bridge_init_agent_hold();
@@ -2687,6 +2682,13 @@ static int load_module(void)
                unload_module();
                return AST_MODULE_LOAD_FAILURE;
        }
                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;
 }
 
        return AST_MODULE_LOAD_SUCCESS;
 }