]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6402 part 2
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 1 Apr 2014 22:21:29 +0000 (03:21 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 1 Apr 2014 22:21:37 +0000 (03:21 +0500)
47 files changed:
libs/freetdm/mod_freetdm/mod_freetdm.c
src/include/switch_core.h
src/include/switch_hashtable.h
src/mod/applications/mod_blacklist/mod_blacklist.c
src/mod/applications/mod_callcenter/mod_callcenter.c
src/mod/applications/mod_conference/mod_conference.c
src/mod/applications/mod_directory/mod_directory.c
src/mod/applications/mod_fifo/mod_fifo.c
src/mod/applications/mod_hash/mod_hash.c
src/mod/applications/mod_httapi/mod_httapi.c
src/mod/applications/mod_lcr/mod_lcr.c
src/mod/applications/mod_redis/mod_redis.c
src/mod/applications/mod_spy/mod_spy.c
src/mod/applications/mod_translate/mod_translate.c
src/mod/applications/mod_valet_parking/mod_valet_parking.c
src/mod/applications/mod_voicemail/mod_voicemail.c
src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c
src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c
src/mod/endpoints/mod_dingaling/mod_dingaling.c
src/mod/endpoints/mod_portaudio/mod_portaudio.c
src/mod/endpoints/mod_rtmp/mod_rtmp.c
src/mod/endpoints/mod_rtmp/rtmp.c
src/mod/endpoints/mod_skinny/mod_skinny.c
src/mod/endpoints/mod_skinny/skinny_api.c
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c
src/mod/endpoints/mod_sofia/sofia_reg.c
src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c
src/mod/event_handlers/mod_cdr_pg_csv/mod_cdr_pg_csv.c
src/mod/event_handlers/mod_erlang_event/handle_msg.c
src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c
src/mod/event_handlers/mod_format_cdr/mod_format_cdr.c
src/mod/event_handlers/mod_rayo/mod_rayo.c
src/mod/event_handlers/mod_rayo/rayo_cpa_component.c
src/mod/formats/mod_local_stream/mod_local_stream.c
src/mod/languages/mod_v8/src/fsxml.cpp
src/mod/loggers/mod_logfile/mod_logfile.c
src/switch_core.c
src/switch_core_hash.c
src/switch_core_session.c
src/switch_event.c
src/switch_hashtable.c
src/switch_loadable_module.c
src/switch_rtp.c
src/switch_xml.c

index 3b13db4eb25aba77223e8c3b417c79e9eb97632e..90dcc1c7a7eff272246e243bd8c03966e3eff1d3 100644 (file)
@@ -5530,7 +5530,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_freetdm_shutdown)
        void *val;
 
        /* destroy ss7 configs */
-       for (hi = switch_core_hash_first( globals.ss7_configs); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.ss7_configs); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                ftdm_conf_node_destroy(val);
        }
index a9752cac4abb76404fbe4e2a03b691925153fe06..d636542bbd44e9b068ee4d843b083efe9df8fc36 100644 (file)
@@ -1459,7 +1459,15 @@ SWITCH_DECLARE(void *) switch_core_hash_find_rdlock(_In_ switch_hash_t *hash, _I
  \param hash the hashtable to use
  \return The element, or NULL if it wasn't found 
 */
-SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_first(_In_ switch_hash_t *hash);
+SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_first_iter(_In_ switch_hash_t *hash, switch_hash_index_t *hi);
+#define switch_core_hash_first(_h) switch_core_hash_first_iter(_h, NULL)
+
+/*!
+ \brief tells if a hash is empty
+ \param hash the hashtable
+ \return TRUE or FALSE depending on if the hash is empty
+*/
+SWITCH_DECLARE(switch_bool_t) switch_core_hash_empty(switch_hash_t *hash);
 
 /*!
  \brief Gets the next element of a hashtable
index 40cd74abd342c8afd186ea9d8b4335f7a50a19a2..4a588586a054e408ebfa72f54020b5397b8ed3d3 100644 (file)
@@ -190,7 +190,8 @@ switch_hashtable_count(switch_hashtable_t *h);
 SWITCH_DECLARE(void)
 switch_hashtable_destroy(switch_hashtable_t **h);
 
-SWITCH_DECLARE(switch_hashtable_iterator_t*) switch_hashtable_first(switch_hashtable_t *h);
+SWITCH_DECLARE(switch_hashtable_iterator_t*) switch_hashtable_first_iter(switch_hashtable_t *h, switch_hashtable_iterator_t *it);
+#define switch_hashtable_first(_h) switch_hashtable_first_iter(_h, NULL)
 SWITCH_DECLARE(switch_hashtable_iterator_t*) switch_hashtable_next(switch_hashtable_iterator_t **iP);
 SWITCH_DECLARE(void) switch_hashtable_this(switch_hashtable_iterator_t *i, const void **key, switch_ssize_t *klen, void **val);
 
index 0abde7ecec0645399b80bc55c2cbb9df02ec54d8..1aa3c82a5c0fe58e87a7f36d3dd06d8a02feac40 100644 (file)
@@ -116,7 +116,7 @@ static switch_status_t do_config(switch_bool_t reload)
 {
        /* Load up blacklists */
        switch_xml_t xml, cfg, lists, list;
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        
        if (!(xml = switch_xml_open_cfg("mod_blacklist.conf", &cfg, NULL))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't load configuration section\n");
@@ -126,7 +126,7 @@ static switch_status_t do_config(switch_bool_t reload)
        switch_mutex_lock(globals.lists_mutex);
        
        /* Destroy any active lists */
-       while ((hi = switch_core_hash_first( globals.lists))) {
+       while ((hi = switch_core_hash_first_iter( globals.lists, hi))) {
                const void *key;
                void *val;
                switch_core_hash_this(hi, &key, NULL, &val);
@@ -282,7 +282,7 @@ SWITCH_STANDARD_API(blacklist_api_function)
                switch_mutex_lock(globals.lists_mutex);
                if (switch_file_open(&fd, filename, SWITCH_FOPEN_WRITE | SWITCH_FOPEN_TRUNCATE | SWITCH_FOPEN_CREATE, SWITCH_FPROT_OS_DEFAULT, globals.pool)
                        == SWITCH_STATUS_SUCCESS) {
-                       for (hi = switch_core_hash_first( bl->list); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(bl->list); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                switch_file_printf(fd, "%s\n", (char *)var);
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "adding %s to the dump file\n", (char *)var);
index e27746a5e2ff52ccfc68698e5e6713b92afeda40..99dab869bd62665099767703c0378e3b74daec43 100644 (file)
@@ -3198,7 +3198,7 @@ SWITCH_STANDARD_API(cc_config_api_function)
                                switch_hash_index_t *hi;
                                stream->write_function(stream, "%s", "name|strategy|moh_sound|time_base_score|tier_rules_apply|tier_rule_wait_second|tier_rule_wait_multiply_level|tier_rule_no_agent_no_wait|discard_abandoned_after|abandoned_resume_allowed|max_wait_time|max_wait_time_with_no_agent|max_wait_time_with_no_agent_time_reached|record_template\n");
                                switch_mutex_lock(globals.mutex);
-                               for (hi = switch_core_hash_first( globals.queue_hash); hi; hi = switch_core_hash_next(&hi)) {
+                               for (hi = switch_core_hash_first(globals.queue_hash); hi; hi = switch_core_hash_next(&hi)) {
                                        void *val = NULL;
                                        const void *key;
                                        switch_ssize_t keylen;
@@ -3251,7 +3251,7 @@ SWITCH_STANDARD_API(cc_config_api_function)
                                switch_hash_index_t *hi;
                                int queue_count = 0;
                                switch_mutex_lock(globals.mutex);
-                               for (hi = switch_core_hash_first( globals.queue_hash); hi; hi = switch_core_hash_next(&hi)) {
+                               for (hi = switch_core_hash_first(globals.queue_hash); hi; hi = switch_core_hash_next(&hi)) {
                                        queue_count++;
                                }
                                switch_mutex_unlock(globals.mutex);
@@ -3373,7 +3373,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_callcenter_load)
    Macro expands to: switch_status_t mod_callcenter_shutdown() */
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_callcenter_shutdown)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        cc_queue_t *queue;
        void *val = NULL;
        const void *key;
@@ -3394,7 +3394,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_callcenter_shutdown)
        }
 
        switch_mutex_lock(globals.mutex);
-       while ((hi = switch_core_hash_first( globals.queue_hash))) {
+       while ((hi = switch_core_hash_first_iter( globals.queue_hash, hi))) {
                switch_core_hash_this(hi, &key, &keylen, &val);
                queue = (cc_queue_t *) val;
 
index ba262116c6e8876505b228c05d8d6808d8049796..6066ed3343830857ced1596c37fef617eb7b0f84 100644 (file)
@@ -5291,7 +5291,7 @@ static switch_status_t list_conferences(const char *line, const char *cursor, sw
        const void *vvar;
 
        switch_mutex_lock(globals.hash_mutex);
-       for (hi = switch_core_hash_first( globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                switch_console_push_match(&my_matches, (const char *) vvar);            
        }
@@ -5783,7 +5783,7 @@ static switch_status_t conf_api_sub_list(conference_obj_t *conference, switch_st
 
        if (conference == NULL) {
                switch_mutex_lock(globals.hash_mutex);
-               for (hi = switch_core_hash_first( globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
                        int fcount = 0;
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        conference = (conference_obj_t *) val;
@@ -6262,7 +6262,7 @@ static switch_status_t conf_api_sub_xml_list(conference_obj_t *conference, switc
 
        if (conference == NULL) {
                switch_mutex_lock(globals.hash_mutex);
-               for (hi = switch_core_hash_first( globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.conference_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        conference = (conference_obj_t *) val;
 
index 5a1d05688121ae2f91e10e07c64b37ff07ad1255..bf5b4fd92c6c731f63f7832e6e85eab3c4bd4f08 100644 (file)
@@ -1070,7 +1070,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_directory_shutdown)
 
        switch_mutex_lock(globals.mutex);
 
-       while ((hi = switch_core_hash_first( globals.profile_hash))) {
+       while ((hi = switch_core_hash_first(globals.profile_hash))) {
                switch_core_hash_this(hi, &key, &keylen, &val);
                profile = (dir_profile_t *) val;
 
index 28cef8f691da5b868a25f897cd5a98c2a746400e..cea09ac0e8ebf1311f17b397d509e9094abbdfc7 100644 (file)
@@ -975,7 +975,7 @@ static int node_idle_consumers(fifo_node_t *node)
        int total = 0;
 
        switch_mutex_lock(node->mutex);
-       for (hi = switch_core_hash_first( node->consumer_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(node->consumer_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                session = (switch_core_session_t *) val;
                channel = switch_core_session_get_channel(session);
@@ -3802,7 +3802,7 @@ static int xml_hash(switch_xml_t xml, switch_hash_t *hash, char *container, char
        x_tmp = switch_xml_add_child_d(xml, container, cc_off++);
        switch_assert(x_tmp);
 
-       for (hi = switch_core_hash_first( hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(hash); hi; hi = switch_core_hash_next(&hi)) {
                int c_off = 0, d_off = 0;
                const char *status;
                const char *ts;
@@ -3987,7 +3987,7 @@ void dump_hash(switch_hash_t *hash, switch_stream_handle_t *stream)
        const void *var;
 
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                stream->write_function(stream, "  %s\n", (char *)var);
        }
@@ -4002,7 +4002,7 @@ void node_dump(switch_stream_handle_t *stream)
        fifo_node_t *node;
        void *val;
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if ((node = (fifo_node_t *) val)) {
                        stream->write_function(stream, "node: %s\n"
@@ -4100,7 +4100,7 @@ SWITCH_STANDARD_API(fifo_api_function)
                switch_assert(x_report);
 
                if (argc < 2) {
-                       for (hi = switch_core_hash_first( globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                node = (fifo_node_t *) val;
 
@@ -4137,7 +4137,7 @@ SWITCH_STANDARD_API(fifo_api_function)
                }
        } else if (!strcasecmp(argv[0], "count")) {
                if (argc < 2) {
-                       for (hi = switch_core_hash_first( globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                node = (fifo_node_t *) val;
                                switch_mutex_lock(node->update_mutex);
@@ -4158,7 +4158,7 @@ SWITCH_STANDARD_API(fifo_api_function)
                }
        } else if (!strcasecmp(argv[0], "has_outbound")) {
                if (argc < 2) {
-                       for (hi = switch_core_hash_first( globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                node = (fifo_node_t *) val;
                                switch_mutex_lock(node->update_mutex);
@@ -4359,7 +4359,7 @@ static switch_status_t load_config(int reload, int del_all)
                fifo_node_t *node;
                void *val;
                switch_mutex_lock(globals.mutex);
-               for (hi = switch_core_hash_first( globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.fifo_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        if ((node = (fifo_node_t *) val) && node->is_static && node->ready == 1) {
                                node->ready = -1;
index a003110779e14afa980ee8e92eafc6898cf8642d..9af63045b39d980d821a389f49cc3e5ce4c79f40 100644 (file)
@@ -291,7 +291,7 @@ SWITCH_LIMIT_RELEASE(limit_release_hash)
        /* clear for uuid */
        if (realm == NULL && resource == NULL) {
                /* Loop through the channel's hashtable which contains mapping to all the limit_hash_item_t referenced by that channel */
-               while ((hi = switch_core_hash_first( pvt->hash))) {
+               while ((hi = switch_core_hash_first(pvt->hash))) {
                        void *val = NULL;
                        const void *key;
                        switch_ssize_t keylen;
@@ -391,7 +391,7 @@ SWITCH_LIMIT_STATUS(limit_status_hash)
        
        switch_thread_rwlock_rdlock(globals.limit_hash_rwlock);
        
-       for (hi = switch_core_hash_first( globals.limit_hash); hi; switch_core_hash_next(hi)) {
+       for (hi = switch_core_hash_first(globals.limit_hash); hi; switch_core_hash_next(hi)) {
                count++;
        }
        
@@ -623,7 +623,7 @@ SWITCH_STANDARD_API(hash_dump_function)
        
        if (mode & 1) {
                switch_thread_rwlock_rdlock(globals.limit_hash_rwlock);
-               for (hi = switch_core_hash_first( globals.limit_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.limit_hash); hi; hi = switch_core_hash_next(&hi)) {
                        void *val = NULL;
                        const void *key;
                        switch_ssize_t keylen;
@@ -639,7 +639,7 @@ SWITCH_STANDARD_API(hash_dump_function)
        
        if (mode & 2) {
                switch_thread_rwlock_rdlock(globals.db_hash_rwlock);
-               for (hi = switch_core_hash_first( globals.db_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.db_hash); hi; hi = switch_core_hash_next(&hi)) {
                        void *val = NULL;
                        const void *key;
                        switch_ssize_t keylen;
@@ -679,7 +679,7 @@ SWITCH_STANDARD_API(hash_remote_function)
                stream->write_function(stream, "Remote connections:\nName\t\t\tState\n");
                
                switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
-               for (hi = switch_core_hash_first( globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
                        void *val;      
                        const void *key;
                        switch_ssize_t keylen;
@@ -780,7 +780,7 @@ void limit_remote_destroy(limit_remote_t **r)
                switch_thread_rwlock_wrlock((*r)->rwlock);
 
                /* Free hashtable data */
-               for (hi = switch_core_hash_first( (*r)->index); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first((*r)->index); hi; hi = switch_core_hash_next(&hi)) {
                        void *val;      
                        const void *key;
                        switch_ssize_t keylen;
@@ -803,7 +803,7 @@ static limit_hash_item_t get_remote_usage(const char *key) {
        switch_hash_index_t *hi;
        
        switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
-       for (hi = switch_core_hash_first( globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
                void *val;      
                const void *hashkey;
                switch_ssize_t keylen;
@@ -1018,7 +1018,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_hash_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        switch_bool_t remote_clean = SWITCH_TRUE;
        
        switch_scheduler_del_task_group("mod_hash");
@@ -1031,7 +1031,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
                limit_remote_t *item = NULL;
                
                switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
-               if ((hi = switch_core_hash_first( globals.remote_hash))) {
+               if ((hi = switch_core_hash_first(globals.remote_hash))) {
                        switch_core_hash_this(hi, &key, &keylen, &val);
                        item = (limit_remote_t *)val;
                }
@@ -1050,7 +1050,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
        switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
        switch_thread_rwlock_wrlock(globals.db_hash_rwlock);
        
-       while ((hi = switch_core_hash_first( globals.limit_hash))) {
+       while ((hi = switch_core_hash_first_iter( globals.limit_hash, hi))) {
                void *val = NULL;
                const void *key;
                switch_ssize_t keylen;
@@ -1059,7 +1059,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
                switch_core_hash_delete(globals.limit_hash, key);
        }
        
-       while ((hi = switch_core_hash_first( globals.db_hash))) {
+       while ((hi = switch_core_hash_first_iter( globals.db_hash, hi))) {
                void *val = NULL;
                const void *key;
                switch_ssize_t keylen;
index 0581034c66f394b092f8f968d0352e8f3cc7cef6..c7877299dde234fd7c5b3545866bfa25edfdc9a3 100644 (file)
@@ -3088,7 +3088,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_httapi_shutdown)
        void *val;
        const void *vvar;
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                profile = (client_profile_t *) val;
                switch_event_destroy(&profile->dial_params.app_list);
index 389f769cfc1cdd611b2e42e1abf55ea922cb3155..7fda9487b1d17939af27cd6c323c4ad9857b52cc 100644 (file)
@@ -2052,7 +2052,7 @@ SWITCH_STANDARD_API(dialplan_lcr_admin_function)
                }
                switch_assert(argv[0]);
                if (!strcasecmp(argv[0], "show") && !strcasecmp(argv[1], "profiles")) {
-                       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, NULL, NULL, &val);
                                profile = (profile_t *) val;
 
index 43bc37f2158b51fed7f157d244b4340d9668384b..3c8fc3f79d96473789dddfc2e8d3d020a3fc3b8b 100644 (file)
@@ -172,7 +172,7 @@ SWITCH_LIMIT_RELEASE(limit_release_redis)
        /* clear for uuid */
        if (realm == NULL && resource == NULL) {
                /* Loop through the channel's hashtable which contains mapping to all the limit_redis_item_t referenced by that channel */
-               while ((hi = switch_core_hash_first( pvt->hash))) {
+               while ((hi = switch_core_hash_first(pvt->hash))) {
                        void *p_val = NULL;
                        const void *p_key;
                        char *p_uuid_key = NULL;
index 974973659f5da864f4a661ca4527eb7b9f09420b..4f4c8ebdf9328f1568eaca12a86c9853bc1d4baf 100644 (file)
@@ -139,7 +139,7 @@ SWITCH_STANDARD_API(dump_hash)
 
        switch_thread_rwlock_rdlock(globals.spy_hash_lock);
 
-       for (hi = switch_core_hash_first( globals.spy_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.spy_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &key, NULL, &val);
                spy = (spy_t *) val;
 
index 026e3eed83ca6072efe4c746948e056ba8f18d7e..b711815e349c890bfe2ac82de759455836bc3c19 100644 (file)
@@ -170,7 +170,7 @@ static void do_unload(void) {
 
        switch_mutex_lock(MUTEX);
 
-       while ((hi = switch_core_hash_first( globals.translate_profiles))) {
+       while ((hi = switch_core_hash_first_iter( globals.translate_profiles, hi))) {
                void *val = NULL;
                const void *key;
                switch_ssize_t keylen;
index c067205826e565440c8f5f23a0bc0020a2926713..90f20233d3aa3e1065c75f27fc200ba9d0379e59 100644 (file)
@@ -105,7 +105,7 @@ static void check_timeouts(void)
        valet_lot_t *lot;
        switch_console_callback_match_t *matches = NULL;
        switch_console_callback_match_node_t *m;
-       switch_hash_index_t *i_hi;
+       switch_hash_index_t *i_hi = NULL;
        const void *i_var;
        void *i_val;
        char *i_ext;
@@ -120,7 +120,7 @@ static void check_timeouts(void)
        }
 
        globals.last_timeout_check = now;
-       for (hi = switch_core_hash_first( globals.hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                switch_console_push_match(&matches, (const char *) var);
        }
@@ -135,7 +135,7 @@ static void check_timeouts(void)
 
                top:
                
-                       for (i_hi = switch_core_hash_first( lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
+                       for (i_hi = switch_core_hash_first_iter( lot->hash, i_hi); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
                                switch_core_hash_this(i_hi, &i_var, NULL, &i_val);
                                i_ext = (char *) i_var;
                                token = (valet_token_t *) i_val;
@@ -146,6 +146,7 @@ static void check_timeouts(void)
                                        goto top;
                                }
                        }
+                       switch_safe_free(i_hi);
 
                        switch_mutex_unlock(lot->mutex);
                }
@@ -167,7 +168,7 @@ static int find_longest(valet_lot_t *lot, int min, int max)
        time_t now = switch_epoch_time_now(NULL);
 
        switch_mutex_lock(lot->mutex);
-       for (i_hi = switch_core_hash_first( lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
+       for (i_hi = switch_core_hash_first(lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
                int i;
                switch_core_hash_this(i_hi, &i_var, NULL, &i_val);
                token = (valet_token_t *) i_val;
@@ -257,7 +258,7 @@ static int valet_lot_count(valet_lot_t *lot)
        now = switch_epoch_time_now(NULL);
 
        switch_mutex_lock(lot->mutex);
-       for (i_hi = switch_core_hash_first( lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
+       for (i_hi = switch_core_hash_first(lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
                switch_core_hash_this(i_hi, &i_var, NULL, &i_val);
                token = (valet_token_t *) i_val;
                if (token->timeout > 0 && (token->timeout < now || token->timeout == 1)) {
@@ -738,7 +739,7 @@ SWITCH_STANDARD_API(valet_info_function)
        stream->write_function(stream, "<lots>\n");
 
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_hash_index_t *i_hi;
                const void *i_var;
                void *i_val;
@@ -754,7 +755,7 @@ SWITCH_STANDARD_API(valet_info_function)
                stream->write_function(stream, "  <lot name=\"%s\">\n", name);
 
                switch_mutex_lock(lot->mutex);
-               for (i_hi = switch_core_hash_first( lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
+               for (i_hi = switch_core_hash_first(lot->hash); i_hi; i_hi = switch_core_hash_next(&i_hi)) {
                        valet_token_t *token;
 
                        switch_core_hash_this(i_hi, &i_var, NULL, &i_val);
@@ -848,7 +849,7 @@ static void pres_event_handler(switch_event_t *event)
                const char *nvar;
 
                switch_mutex_lock(globals.mutex);
-               for (hi = switch_core_hash_first( globals.hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        nvar = (const char *) var;
 
index 5538f644329e38bfd8b409b70b1fafef5ea0b3e8..0d985d9c743313fbcaee96e0b70b59059a6b30b0 100644 (file)
@@ -3866,7 +3866,7 @@ SWITCH_STANDARD_API(boxcount_api_function)
                        /* Kept for backwards-compatibility */
                        switch_hash_index_t *hi;
                        switch_mutex_lock(globals.mutex);
-                       if ((hi = switch_core_hash_first( globals.profile_hash))) {
+                       if ((hi = switch_core_hash_first(globals.profile_hash))) {
                                void *val;
                                switch_core_hash_this(hi, NULL, NULL, &val);
                                profile = (vm_profile_t *) val;
@@ -4020,7 +4020,7 @@ static void actual_message_query_handler(switch_event_t *event)
                                                                  "Cound not find a profile for domain: [%s] Returning 0 messages\nWhen message-query-exact-match is enabled you must have a dedicated vm profile per distinct domain name you wish to use.\n", domain);
                        }
                } else {
-                       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, NULL, NULL, &val);
                                profile = (vm_profile_t *) val;
                                parse_profile();
@@ -4029,6 +4029,7 @@ static void actual_message_query_handler(switch_event_t *event)
                                        break;
                                }
                        }
+                       switch_safe_free(hi);
                }
 
                switch_safe_free(dup);
@@ -4923,7 +4924,7 @@ SWITCH_STANDARD_API(voicemail_api_function)
                } else if (!strcasecmp(argv[0], "status")) {
                        stream->write_function(stream, "============================\n");
                        switch_mutex_lock(globals.mutex);
-                       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, NULL, NULL, &val);
                                profile = (vm_profile_t *) val;
                                stream->write_function(stream, "Profile: %s\n", profile->name);
@@ -4958,7 +4959,7 @@ SWITCH_STANDARD_API(voicemail_api_function)
                void *value;
 
                switch_mutex_lock(globals.mutex);
-               for (index = switch_core_hash_first( globals.profile_hash); index; index = switch_core_hash_next(&index)) {
+               for (index = switch_core_hash_first(globals.profile_hash); index; index = switch_core_hash_next(&index)) {
                        switch_core_hash_this(index, NULL, NULL, &value);
                        profile = (vm_profile_t *) value;
                        if (profile) {
@@ -4966,6 +4967,7 @@ SWITCH_STANDARD_API(voicemail_api_function)
                                break;
                        }
                }
+               switch_safe_free(index);
                switch_mutex_unlock(globals.mutex);
        }
 
@@ -6237,7 +6239,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_voicemail_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_voicemail_shutdown)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        vm_profile_t *profile;
        void *val = NULL;
        const void *key;
@@ -6261,7 +6263,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_voicemail_shutdown)
        }
 
        switch_mutex_lock(globals.mutex);
-       while ((hi = switch_core_hash_first( globals.profile_hash))) {
+       while ((hi = switch_core_hash_first_iter( globals.profile_hash, hi))) {
                switch_core_hash_this(hi, &key, &keylen, &val);
                profile = (vm_profile_t *) val;
 
index 3ca0b2e02e11570a62de73100cafaeaf6c160b45..f9149e073528028cbefa0abff61ddc88e0637777 100644 (file)
@@ -1158,7 +1158,7 @@ static switch_status_t synth_channel_set_params(speech_channel_t *schannel, mrcp
 {
        /* loop through each param and add to synth header or vendor-specific-params */
        switch_hash_index_t *hi = NULL;
-       for (hi = switch_core_hash_first( schannel->params); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(schannel->params); hi; hi = switch_core_hash_next(&hi)) {
                char *param_name = NULL, *param_val = NULL;
                const void *key;
                void *val;
@@ -1633,7 +1633,7 @@ static switch_status_t synth_speech_open(switch_speech_handle_t *sh, const char
        }
 
        /* Set default TTS params */
-       for (hi = switch_core_hash_first( profile->default_synth_params); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(profile->default_synth_params); hi; hi = switch_core_hash_next(&hi)) {
                char *param_name = NULL, *param_val = NULL;
                const void *key;
                void *val;
@@ -2195,7 +2195,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel)
        r->timers_started = zstr(start_input_timers) || strcasecmp(start_input_timers, "false");
 
        /* count enabled grammars */
-       for (egk = switch_core_hash_first( r->enabled_grammars); egk; egk = switch_core_hash_next(&egk)) {
+       for (egk = switch_core_hash_first(r->enabled_grammars); egk; egk = switch_core_hash_next(&egk)) {
                // NOTE: This postponed type check is necessary to allow a non-URI-list grammar to execute alone
                if (grammar_uri_count == 1 && grammar->type != GRAMMAR_TYPE_URI)
                        goto no_grammar_alone;
@@ -2205,6 +2205,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel)
                      no_grammar_alone:
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Grammar '%s' can only be used alone (not a URI list)\n", schannel->name, key);
                        status = SWITCH_STATUS_FALSE;
+                       switch_safe_free(egk);
                        goto done;
                }
                len = strlen(grammar->data);
@@ -2227,7 +2228,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel)
                /* get the enabled grammars list */
                grammar_uri_list = switch_core_alloc(schannel->memory_pool, grammar_uri_list_len + 1);
                grammar_uri_list_len = 0;
-               for (egk = switch_core_hash_first( r->enabled_grammars); egk; egk = switch_core_hash_next(&egk)) {
+               for (egk = switch_core_hash_first(r->enabled_grammars); egk; egk = switch_core_hash_next(&egk)) {
                        switch_core_hash_this(egk, (void *) &key, NULL, (void *) &grammar);
                        len = strlen(grammar->data);
                        if (!len)
@@ -2810,7 +2811,7 @@ static switch_status_t recog_channel_set_params(speech_channel_t *schannel, mrcp
 {
        /* loop through each param and add to recog header or vendor-specific-params */
        switch_hash_index_t *hi = NULL;
-       for (hi = switch_core_hash_first( schannel->params); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(schannel->params); hi; hi = switch_core_hash_next(&hi)) {
                char *param_name = NULL, *param_val = NULL;
                const void *key;
                void *val;
@@ -3132,7 +3133,7 @@ static switch_status_t recog_asr_open(switch_asr_handle_t *ah, const char *codec
        }
 
        /* Set default ASR params */
-       for (hi = switch_core_hash_first( profile->default_recog_params); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(profile->default_recog_params); hi; hi = switch_core_hash_next(&hi)) {
                char *param_name = NULL, *param_val = NULL;
                const void *key;
                void *val;
index 3d4e0a3c2593b1a10f7967287394ce698bf885bb..096a4c90a725a4937f1b8bf38f74148ba43a1f76 100644 (file)
@@ -930,7 +930,7 @@ SWITCH_STANDARD_API(sangoma_function)
 #define STATS_FORMAT "%-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-15.15s %-15.15s\n"
                stream->write_function(stream, STATS_FORMAT,
                                "Session", "Codec", "Enc", "Dec", "Enc Tx", "Enc Rx", "Dec Tx", "Dec Rx", "Enc Lost", "Dec Lost", "Enc AvgRxMs", "Dec AvgRxMs");
-               for (hi = switch_core_hash_first( g_sessions_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(g_sessions_hash); hi; hi = switch_core_hash_next(&hi)) {
                        struct sangoma_transcoding_session *sess;
                        char sessid_str[25];
                        char encoder_tx_str[25];
index e48b2098cd22e69fc1e015959ace78b37879da76..e6cc5735cf218fb0c2b9c64b603a7c33d21dda1d 100644 (file)
@@ -569,7 +569,7 @@ static void pres_event_handler(switch_event_t *event)
                switch_mprintf("select sub_from, sub_to,'%q','%q','%q','%q' from jabber_subscriptions where sub_to = '%q%q'", type, rpid, status, proto, pstr,
                                           from);
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (mdl_profile_t *) val;
 
@@ -701,7 +701,7 @@ static void roster_event_handler(switch_event_t *event)
                sql = switch_mprintf("select *,'%q' from jabber_subscriptions", status ? status : "");
        }
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (mdl_profile_t *) val;
 
@@ -738,7 +738,7 @@ static void ipchanged_event_handler(switch_event_t *event)
                mdl_profile_t *profile;
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "IP change detected [%s]->[%s]\n", old_ip4, new_ip4);
                if (globals.profile_hash) {
-                       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, NULL, NULL, &val);
                                profile = (mdl_profile_t *) val;
                                if (old_ip4 && profile->extip && !strcmp(profile->extip, old_ip4)) {
@@ -799,7 +799,7 @@ static void sign_off(void)
        sql = switch_mprintf("select * from jabber_subscriptions");
 
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (mdl_profile_t *) val;
 
@@ -2684,7 +2684,7 @@ static switch_status_t list_profiles(const char *line, const char *cursor, switc
        switch_console_callback_match_t *my_matches = NULL;
        switch_status_t status = SWITCH_STATUS_FALSE;
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                profile = (mdl_profile_t *) val;
                if (!strncmp("dl_logout", line, 9)) {
@@ -3090,7 +3090,7 @@ SWITCH_STANDARD_API(dingaling)
        if (argv[0] && !strncasecmp(argv[0], "status", 6)) {
                stream->write_function(stream, "--DingaLing status--\n");
                stream->write_function(stream, "login   |       connected\n");
-               for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        profile = (mdl_profile_t *) val;
                        stream->write_function(stream, "%s      |       ", profile->login);
@@ -3345,7 +3345,7 @@ static switch_status_t soft_reload(void)
 
        switch_xml_free(xml);
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &data);
                profile = (mdl_profile_t *) data;
 
@@ -3356,7 +3356,7 @@ static switch_status_t soft_reload(void)
                }
        }
 
-       for (hi = switch_core_hash_first( name_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(name_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &data);
 
                if ((profile = switch_core_hash_find(globals.profile_hash, (char *) data))) {
index 5823b27dd3adcc321322da6cff0d30005925a984..8f19bacf810d01d0581c7f18beb15dffceb6bd80 100644 (file)
@@ -2491,7 +2491,7 @@ static switch_status_t list_shared_streams(char **argv, int argc, switch_stream_
 {
        switch_hash_index_t *hi;
        int cnt = 0;
-       for (hi = switch_core_hash_first( globals.sh_streams); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.sh_streams); hi; hi = switch_core_hash_next(&hi)) {
                const void *var;
                void *val;
                shared_audio_stream_t *s = NULL;
@@ -2509,7 +2509,7 @@ static switch_status_t list_endpoints(char **argv, int argc, switch_stream_handl
 {
        switch_hash_index_t *hi;
        int cnt = 0;
-       for (hi = switch_core_hash_first( globals.endpoints); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.endpoints); hi; hi = switch_core_hash_next(&hi)) {
                const void *var;
                void *val;
                audio_endpoint_t *e = NULL;
index 19a977afa41f474db1dab93aaf8ec173a4c2fa36..6a7e4a45b7d49f849e574b7842e21557a9f4feb9 100644 (file)
@@ -818,7 +818,7 @@ switch_status_t rtmp_session_request(rtmp_profile_t *profile, rtmp_session_t **n
 
 static void rtmp_garbage_colletor(void)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
 
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "RTMP Garbage Collection\n");
 
@@ -827,7 +827,7 @@ static void rtmp_garbage_colletor(void)
 
  top:
 
-       for (hi = switch_core_hash_first( rtmp_globals.session_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first_iter( rtmp_globals.session_hash, hi); hi; hi = switch_core_hash_next(&hi)) {
                void *val;      
                const void *key;
                switch_ssize_t keylen;
@@ -842,6 +842,7 @@ static void rtmp_garbage_colletor(void)
                        }
                }
        }
+       switch_safe_free(hi);
        
        switch_thread_rwlock_unlock(rtmp_globals.session_rwlock);
 }
@@ -868,7 +869,7 @@ switch_status_t rtmp_real_session_destroy(rtmp_session_t **rsession)
        int sess = 0;
 
        switch_thread_rwlock_rdlock((*rsession)->session_rwlock);
-       for (hi = switch_core_hash_first( (*rsession)->session_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first((*rsession)->session_hash); hi; hi = switch_core_hash_next(&hi)) {
                void *val;      
                const void *key;
                switch_ssize_t keylen;
@@ -1086,7 +1087,7 @@ switch_status_t rtmp_profile_destroy(rtmp_profile_t **profile) {
        switch_thread_rwlock_wrlock((*profile)->rwlock);
        
        /* Kill all sessions */ 
-       while ((hi = switch_core_hash_first( (*profile)->session_hash))) {
+       while ((hi = switch_core_hash_first((*profile)->session_hash))) {
                void *val;
                rtmp_session_t *session;
                const void *key;
@@ -1633,7 +1634,7 @@ SWITCH_STANDARD_API(rtmp_function)
                                        stream->write_function(stream, "\nSessions:\n");
                                        stream->write_function(stream, "uuid,address,user,domain,flashVer,state\n");
                                        switch_thread_rwlock_rdlock(profile->session_rwlock);
-                                       for (hi = switch_core_hash_first( profile->session_hash); hi; hi = switch_core_hash_next(&hi)) {
+                                       for (hi = switch_core_hash_first(profile->session_hash); hi; hi = switch_core_hash_next(&hi)) {
                                                void *val;      
                                                const void *key;
                                                switch_ssize_t keylen;
@@ -1655,7 +1656,7 @@ SWITCH_STANDARD_API(rtmp_function)
                                        stream->write_function(stream, "user,nickname,uuid\n");
                                        
                                        switch_thread_rwlock_rdlock(profile->reg_rwlock);
-                                       for (hi = switch_core_hash_first( profile->reg_hash); hi; hi = switch_core_hash_next(&hi)) {
+                                       for (hi = switch_core_hash_first(profile->reg_hash); hi; hi = switch_core_hash_next(&hi)) {
                                                void *val;      
                                                const void *key;
                                                switch_ssize_t keylen;
@@ -1681,7 +1682,7 @@ SWITCH_STANDARD_API(rtmp_function)
                } else {
                        switch_hash_index_t *hi;
                        switch_thread_rwlock_rdlock(rtmp_globals.profile_rwlock);
-                       for (hi = switch_core_hash_first( rtmp_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(rtmp_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                void *val;      
                                const void *key;
                                switch_ssize_t keylen;
@@ -1805,7 +1806,7 @@ static switch_status_t console_complete_hashtable(switch_hash_t *hash, const cha
        switch_console_callback_match_t *my_matches = NULL;
        switch_status_t status = SWITCH_STATUS_FALSE;
 
-       for (hi = switch_core_hash_first( hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                switch_console_push_match(&my_matches, (const char *) vvar);
        }
@@ -1930,10 +1931,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rtmp_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_rtmp_shutdown)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
 
        switch_mutex_lock(rtmp_globals.mutex);
-       while ((hi = switch_core_hash_first( rtmp_globals.profile_hash))) {
+       while ((hi = switch_core_hash_first_iter( rtmp_globals.profile_hash, hi))) {
                void *val;      
                const void *key;
                switch_ssize_t keylen;
index aad10e2fb4d572255778176a5a57b8aaada22180..277edcf8a69a93a219be9391191973850bf01564 100644 (file)
@@ -243,7 +243,7 @@ switch_status_t rtmp_check_auth(rtmp_session_t *rsession, const char *user, cons
     if (disallow_multiple_registration) {
         switch_hash_index_t *hi;
         switch_thread_rwlock_rdlock(rsession->profile->session_rwlock);
-        for (hi = switch_core_hash_first( rsession->profile->session_hash); hi; hi = switch_core_hash_next(&hi)) {
+        for (hi = switch_core_hash_first(rsession->profile->session_hash); hi; hi = switch_core_hash_next(&hi)) {
             void *val; 
             const void *key;
             switch_ssize_t keylen;
index 6c35e543e5f25950a11932dd157a173762d33e53..0b75bd5b927b97c3fa64e589f04ffb54c7f0a029 100644 (file)
@@ -197,7 +197,7 @@ skinny_profile_t *skinny_find_profile_by_domain(const char *domain_name)
        skinny_profile_t *profile = NULL, *tmp_profile;
 
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                tmp_profile = (skinny_profile_t *) val;
 
@@ -210,6 +210,7 @@ skinny_profile_t *skinny_find_profile_by_domain(const char *domain_name)
                        break;
                }
        }
+       switch_safe_free(hi);
        switch_mutex_unlock(globals.mutex);
 
        return profile;
@@ -1401,7 +1402,7 @@ static void walk_listeners(skinny_listener_callback_func_t callback, void *pvt)
 
        /* walk listeners */
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (skinny_profile_t *) val;
 
@@ -2441,7 +2442,7 @@ static void skinny_trap_event_handler(switch_event_t *event)
 
                switch_mutex_lock(globals.mutex);
                if (globals.profile_hash) {
-                       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                if ((profile = (skinny_profile_t *) val) && profile->auto_restart) {
                                        if (!strcmp(profile->ip, old_ip4)) {
@@ -2477,7 +2478,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load)
        load_skinny_config();
 
        /* at least one profile */
-       if (!switch_core_hash_first( globals.profile_hash)) {
+       if (switch_core_hash_empty( globals.profile_hash)) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No profile found!\n");
                return SWITCH_STATUS_TERM;
        }
@@ -2540,7 +2541,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load)
 
        /* launch listeners */
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                void *val;
                skinny_profile_t *profile;
 
@@ -2587,7 +2588,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skinny_shutdown)
 
        /* close sockets */
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                skinny_profile_t *profile;
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (skinny_profile_t *) val;
index 03c319da0c31d2c32f6d524da5ea29e79af67a3d..aba3abf97a14fbb83924274a4e15e5a6c5c13736 100644 (file)
@@ -49,7 +49,7 @@ static switch_status_t skinny_api_list_profiles(const char *line, const char *cu
 
        /* walk profiles */
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (skinny_profile_t *) val;
 
index 056a996be9139f22c1e9f6866e8ba3fa9765a6ee..c70bc1771e599a56190ca4fc666f3252ec64c4ef 100644 (file)
@@ -2474,7 +2474,7 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
                        stream->write_function(stream, "%25s\t%32s\t%s\t%s\t%s\n", "Profile::Gateway-Name", "    Data    ", "State", "IB Calls(F/T)", "OB Calls(F/T)");
                        stream->write_function(stream, "%s\n", line);
                        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &vvar, NULL, &val);
                                profile = (sofia_profile_t *) val;
                                if (sofia_test_pflag(profile, PFLAG_RUNNING)) {
@@ -2707,7 +2707,7 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
        stream->write_function(stream, "%25s\t%s\t  %40s\t%s\n", "Name", "   Type", "Data", "State");
        stream->write_function(stream, "%s\n", line);
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                profile = (sofia_profile_t *) val;
                if (sofia_test_pflag(profile, PFLAG_RUNNING)) {
@@ -2819,7 +2819,7 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl
                        stream->write_function(stream, "<gateways>\n", header);
 
                        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &vvar, NULL, &val);
                                profile = (sofia_profile_t *) val;
                                if (sofia_test_pflag(profile, PFLAG_RUNNING)) {
@@ -2991,7 +2991,7 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl
        stream->write_function(stream, "%s\n", header);
        stream->write_function(stream, "<profiles>\n");
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                profile = (sofia_profile_t *) val;
                if (sofia_test_pflag(profile, PFLAG_RUNNING)) {
@@ -3654,7 +3654,7 @@ SWITCH_STANDARD_API(sofia_contact_function)
                        const void *var;
                        void *val;
 
-                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                if ((profile = (sofia_profile_t *) val) && !strcmp((char *)var, profile->name)) {
                                        select_from_profile(profile, user, domain, concat, exclude_contact, &mystream, SWITCH_TRUE);
@@ -3839,7 +3839,7 @@ SWITCH_STANDARD_API(sofia_presence_data_function)
                        const void *var;
                        void *val;
 
-                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                if ((profile = (sofia_profile_t *) val) && !strcmp((char *)var, profile->name)) {
                                        get_presence_data(profile, user, domain, search, stream);
@@ -5230,7 +5230,7 @@ static void general_event_handler(switch_event_t *event)
 
                                switch_mutex_lock(mod_sofia_globals.hash_mutex);
                                if (mod_sofia_globals.profile_hash && !zstr(old_ip4) && !zstr(new_ip4)) {
-                                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                                switch_core_hash_this(hi, &var, NULL, &val);
 
                                                if ((profile = (sofia_profile_t *) val)) {
@@ -5259,7 +5259,7 @@ static void general_event_handler(switch_event_t *event)
 
                                switch_mutex_lock(mod_sofia_globals.hash_mutex);
                                if (mod_sofia_globals.profile_hash) {
-                                       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                                       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                                int rb = 0;
                                                uint32_t x = 0;
                                                switch_core_hash_this(hi, &var, NULL, &val);
@@ -5372,7 +5372,7 @@ switch_status_t list_profiles_full(const char *line, const char *cursor, switch_
        switch_status_t status = SWITCH_STATUS_FALSE;
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
 
                profile = (sofia_profile_t *) val;
@@ -5410,7 +5410,7 @@ static switch_status_t list_gateways(const char *line, const char *cursor, switc
        switch_status_t status = SWITCH_STATUS_FALSE;
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-       for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &vvar, NULL, &val);
                profile = (sofia_profile_t *) val;
                if (sofia_test_pflag(profile, PFLAG_RUNNING)) {
index 0cd103ea7e030c98aa7c59a1d5b34b1c77b9a08b..ac6600f94e989d21c6843d6f135e3ce6e6489dce 100644 (file)
@@ -7196,7 +7196,7 @@ nua_handle_t *sofia_global_nua_handle_by_replaces(sip_replaces_t *replaces)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((profile = (sofia_profile_t *) val)) {
                                if (!(nh = nua_handle_by_replaces(profile->nua, replaces))) {
@@ -7206,6 +7206,7 @@ nua_handle_t *sofia_global_nua_handle_by_replaces(sip_replaces_t *replaces)
                                        break;
                        }
                }
+               switch_safe_free(hi);
        }
        switch_mutex_unlock(mod_sofia_globals.hash_mutex);
 
index 8fb9df69f4efeecff5c4b1041b1c8509290e06c7..a69fb687d0992df2221d81fb98e83ed6dd7da136 100644 (file)
@@ -1653,7 +1653,7 @@ void sofia_glue_restart_all_profiles(void)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val)) {
                                int rsec = 10;
@@ -1688,7 +1688,7 @@ void sofia_glue_global_siptrace(switch_bool_t on)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val)) {
                                nua_set_params(pptr->nua, TPTAG_LOG(on), TAG_END());                            
@@ -1708,7 +1708,7 @@ void sofia_glue_global_standby(switch_bool_t on)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val)) {
                                if (on) {
@@ -1732,7 +1732,7 @@ void sofia_glue_global_capture(switch_bool_t on)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val)) {
                                nua_set_params(pptr->nua, TPTAG_CAPT(on ? mod_sofia_globals.capture_server : NULL), TAG_END());
@@ -1753,7 +1753,7 @@ void sofia_glue_global_watchdog(switch_bool_t on)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val)) {
                                pptr->watchdog_enabled = (on ? 1 : 0);
@@ -1776,7 +1776,7 @@ void sofia_glue_del_profile(sofia_profile_t *profile)
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
        if (mod_sofia_globals.profile_hash) {
-               for (hi = switch_core_hash_first( mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(mod_sofia_globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((pptr = (sofia_profile_t *) val) && pptr == profile) {
                                aliases[i++] = strdup((char *) var);
index bd0f424dad80e91e0a351add40a0cb26173d6c35..2cc74dac32c0c2f8dabd5717b01291202d8efc98 100644 (file)
@@ -1101,7 +1101,7 @@ static int debounce_check(sofia_profile_t *profile, const char *user, const char
 void sofia_reg_close_handles(sofia_profile_t *profile)
 {
        nua_handle_t *nh = NULL;
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        const void *var;
        void *val;
 
@@ -1109,7 +1109,7 @@ void sofia_reg_close_handles(sofia_profile_t *profile)
        switch_mutex_lock(profile->flag_mutex);
        if (profile->reg_nh_hash) {
        top:
-               for (hi = switch_core_hash_first( profile->reg_nh_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first_iter( profile->reg_nh_hash, hi); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((nh = (nua_handle_t *) val)) {
                                nua_handle_unref(nh);
@@ -1118,6 +1118,8 @@ void sofia_reg_close_handles(sofia_profile_t *profile)
                                goto top;
                        }
                }
+               switch_safe_free(hi);
+
        }
        switch_mutex_unlock(profile->flag_mutex);
 
@@ -3155,7 +3157,7 @@ sofia_gateway_t *sofia_reg_find_gateway_by_realm__(const char *file, const char
        void *val;
 
        switch_mutex_lock(mod_sofia_globals.hash_mutex);
-       for (hi = switch_core_hash_first( mod_sofia_globals.gateway_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(mod_sofia_globals.gateway_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                if (key && (gateway = (sofia_gateway_t *) val) && !gateway->deleted && gateway->register_realm && !strcasecmp(gateway->register_realm, key)) {
                        break;
@@ -3163,6 +3165,7 @@ sofia_gateway_t *sofia_reg_find_gateway_by_realm__(const char *file, const char
                        gateway = NULL;
                }
        }
+       switch_safe_free(hi);
 
        if (gateway) {
                if (!sofia_test_pflag(gateway->profile, PFLAG_RUNNING) || gateway->deleted) {
index 9a2bdb9ae00b98f8dd706192d98fd0bae0eb5139..08c033262f56cc39c6953e316258c220f81aa1eb 100644 (file)
@@ -279,7 +279,7 @@ static void do_rotate_all()
        }
 
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                fd = (cdr_fd_t *) val;
                switch_mutex_lock(fd->mutex);
@@ -296,7 +296,7 @@ static void do_teardown()
        void *val;
        cdr_fd_t *fd;
        switch_mutex_lock(globals.mutex);
-       for (hi = switch_core_hash_first( globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                fd = (cdr_fd_t *) val;
                switch_mutex_lock(fd->mutex);
index 7136fd06f1c364b491ba708fcfd6e618829e6b6d..8753c846eaf41348bfddd10c7f44ef4b4b45c708 100644 (file)
@@ -401,7 +401,7 @@ static void event_handler(switch_event_t *event)
        }
 
        if (sig && !strcmp(sig, "HUP")) {
-               for (hi = switch_core_hash_first( globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.fd_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        fd = (cdr_fd_t *) val;
                        switch_mutex_lock(fd->mutex);
index aff2fff67f0c66be9d66b926f43b6a0d49253ecc..af287189821d690474555193dc8d75954746b5a8 100644 (file)
@@ -1132,7 +1132,7 @@ static switch_status_t handle_ref_tuple(listener_t *listener, erlang_msg * msg,
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Hashed ref to %s\n", hash);
 
        switch_thread_rwlock_rdlock(listener->session_rwlock);
-       for (iter = switch_core_hash_first( listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
+       for (iter = switch_core_hash_first(listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
                switch_core_hash_this(iter, &key, NULL, &val);
                se = (session_elem_t*)val;
                if (se->spawn_reply && !strncmp(se->spawn_reply->hash, hash, 100)) {
@@ -1154,6 +1154,7 @@ static switch_status_t handle_ref_tuple(listener_t *listener, erlang_msg * msg,
                        break;
                }
        }
+       switch_safe_free(iter);
        switch_thread_rwlock_unlock(listener->session_rwlock);
 
        if (found) {
index eee0f9c7e72cae982621689fcbeb0aeac5cece3b..83850204fc988e5f6cd3f7d7fb7ef6c49a8bea83 100644 (file)
@@ -364,7 +364,7 @@ session_elem_t *find_session_elem_by_pid(listener_t *listener, erlang_pid *pid)
        session_elem_t *session = NULL;
 
        switch_thread_rwlock_rdlock(listener->session_rwlock);
-       for (iter = switch_core_hash_first( listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
+       for (iter = switch_core_hash_first(listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
                switch_core_hash_this(iter, &key, NULL, &val);
                
                if (((session_elem_t*)val)->process.type == ERLANG_PID && !ei_compare_pids(pid, &((session_elem_t*)val)->process.pid)) {
@@ -373,6 +373,7 @@ session_elem_t *find_session_elem_by_pid(listener_t *listener, erlang_pid *pid)
                        break;
                }
        }
+       switch_safe_free(iter);
        switch_thread_rwlock_unlock(listener->session_rwlock);
 
        return session;
@@ -644,7 +645,7 @@ static switch_status_t check_attached_sessions(listener_t *listener, int *msgs_s
 
        /* TODO try to minimize critical section */
        switch_thread_rwlock_rdlock(listener->session_rwlock);
-       for (iter = switch_core_hash_first( listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
+       for (iter = switch_core_hash_first(listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
                switch_core_hash_this(iter, &key, NULL, &value);
                sp = (session_elem_t*)value;
                if (switch_test_flag(sp, LFLAG_WAITING_FOR_PID)) {
@@ -1333,7 +1334,7 @@ void destroy_listener(listener_t * listener)
 
        /* clean up all the attached sessions */
        switch_thread_rwlock_wrlock(listener->session_rwlock);
-       for (iter = switch_core_hash_first( listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
+       for (iter = switch_core_hash_first(listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
                switch_core_hash_this(iter, &key, NULL, &value);
                s = (session_elem_t*)value;
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Orphaning call %s\n", s->uuid_str);
@@ -1529,7 +1530,7 @@ int count_listener_sessions(listener_t *listener)
        switch_hash_index_t *iter;
 
        switch_thread_rwlock_rdlock(listener->session_rwlock);
-       for (iter = switch_core_hash_first( listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
+       for (iter = switch_core_hash_first(listener->sessions); iter; iter = switch_core_hash_next(&iter)) {
                count++;
        }
        switch_thread_rwlock_unlock(listener->session_rwlock);
@@ -1750,7 +1751,7 @@ SWITCH_STANDARD_API(erlang_cmd)
 
                                found = 1;
                                switch_thread_rwlock_rdlock(l->session_rwlock);
-                               for (iter = switch_core_hash_first( l->sessions); iter; iter = switch_core_hash_next(&iter)) {
+                               for (iter = switch_core_hash_first(l->sessions); iter; iter = switch_core_hash_next(&iter)) {
                                        empty = 0;
                                        switch_core_hash_this(iter, &key, NULL, &value);
                                        sp = (session_elem_t*)value;
@@ -1791,7 +1792,7 @@ SWITCH_STANDARD_API(erlang_cmd)
                                        }
                                        stream->write_function(stream, "CUSTOM:\n", switch_event_name(x));
 
-                                       for (iter = switch_core_hash_first( l->event_hash); iter; iter = switch_core_hash_next(&iter)) {
+                                       for (iter = switch_core_hash_first(l->event_hash); iter; iter = switch_core_hash_next(&iter)) {
                                                switch_core_hash_this(iter, &key, NULL, &val);
                                                stream->write_function(stream, "\t%s\n", (char *)key);
                                        }
index 70a76d79b07830627bd05a6c5c4ab3d6ee8066a0..b2eb95ce8b72461a172652e98f63e9512a8db9e9 100644 (file)
@@ -247,7 +247,7 @@ static void event_handler(switch_event_t *event)
                struct peer_status *last;
                char *host;
 
-               for (cur = switch_core_hash_first( globals.peer_hash); cur; cur = switch_core_hash_next(&cur)) {
+               for (cur = switch_core_hash_first(globals.peer_hash); cur; cur = switch_core_hash_next(&cur)) {
                        switch_core_hash_this(cur, &key, &keylen, &value);
                        host = (char *) key;
                        last = (struct peer_status *) value;
@@ -351,7 +351,7 @@ SWITCH_STANDARD_API(multicast_peers)
        char *host;
        int i = 0;
 
-       for (cur = switch_core_hash_first( globals.peer_hash); cur; cur = switch_core_hash_next(&cur)) {
+       for (cur = switch_core_hash_first(globals.peer_hash); cur; cur = switch_core_hash_next(&cur)) {
                switch_core_hash_this(cur, &key, &keylen, &value);
                host = (char *) key;
                last = (struct peer_status *) value;
index 80b671497acf85633efa1419c2f88d94b71bc112..57d3e1ba562a42030d27105fb4ae3fbb27ba0f03 100644 (file)
@@ -495,7 +495,7 @@ static switch_status_t my_on_reporting(switch_core_session_t *session)
 
        status = SWITCH_STATUS_SUCCESS;
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                cdr_profile_t *profile;
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (cdr_profile_t *) val;
@@ -518,7 +518,7 @@ static void event_handler(switch_event_t *event)
        const char *sig = switch_event_get_header(event, "Trapped-Signal");
 
        if (sig && !strcmp(sig, "HUP")) {
-               for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                        cdr_profile_t *profile;
                        switch_core_hash_this(hi, NULL, NULL, &val);
                        profile = (cdr_profile_t *) val;
@@ -785,7 +785,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_format_cdr_shutdown)
        switch_event_unbind(&globals.node);
        switch_core_remove_state_handler(&state_handlers);
 
-       for (hi = switch_core_hash_first( globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(globals.profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                cdr_profile_t *profile;
                switch_core_hash_this(hi, NULL, NULL, &val);
                profile = (cdr_profile_t *) val;
index 558de801f744b7b2fae199f700f0e67134d96224..017f0793de77b1ba84bb94c98c34bfd8062af286 100644 (file)
@@ -508,6 +508,7 @@ static void pause_when_offline(void)
                                break;
                        }
                }
+               switch_safe_free(hi);
 
                if (is_online) {
                        resume_inbound_calling();
index b77aaf7d1ce91f0c10d1d4c25fb0a8eb142692d2..364a6b6176a726c429f2c6863d18f921c46cfdbe 100644 (file)
@@ -105,7 +105,7 @@ static void unsubscribe(const char *uuid, const char *signal_type, const char *j
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_DEBUG, "Unsubscribe %s => %s\n", signal_type, jid);
 
                        /* clean up hash if empty */
-                       if (!switch_core_hash_first(signal_subscribers)) {
+                       if (switch_core_hash_empty(signal_subscribers)) {
                                switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_DEBUG, "Destroy %s subscriber hash\n", signal_type);
                                switch_core_hash_destroy(&signal_subscribers);
                                switch_core_hash_delete(globals.subscribers, key);
index 77ce050ee57e2aed37979b2f8e74cba918b107a9..35ea59d8411837f7da7c95c2e0f7ca76dd5a9a1a 100644 (file)
@@ -810,7 +810,7 @@ SWITCH_STANDARD_API(show_local_stream_function)
        switch_mutex_lock(globals.mutex);
 
        if (zstr(cmd)) {
-               for (hi = switch_core_hash_first( globals.source_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(globals.source_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        if ((source = (local_stream_source_t *) val)) {
                                stream->write_function(stream, "%s,%s\n", source->name, source->location);
index 927989f847ac9ec95b3f3da1fabca0f5eba458b9..7d20e00c0c06ea771185489f9589ca4b2ecf14ba 100644 (file)
@@ -198,7 +198,7 @@ void FSXML::DestroyHash()
        }
 
        /* First destroy all objects in the hash */
-       for (hi = switch_core_hash_first( tmp); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(tmp); hi; hi = switch_core_hash_next(&hi)) {
                const void *var = NULL;
                void *val = NULL;
                FSXML *obj;
index 1388f728bd2846372923cc13cfaffade33a71cbe..d7024a07e71857bab3d25952e8ec41c941f32720 100644 (file)
@@ -264,7 +264,7 @@ static switch_status_t process_node(const switch_log_node_t *node, switch_log_le
        const void *var;
        logfile_profile_t *profile;
 
-       for (hi = switch_core_hash_first( profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                size_t mask = 0;
                size_t ok = 0;
 
@@ -380,14 +380,14 @@ static void event_handler(switch_event_t *event)
 
        if (sig && !strcmp(sig, "HUP")) {
                if (globals.rotate) {
-                       for (hi = switch_core_hash_first( profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                profile = val;
                                mod_logfile_rotate(profile);
                        }
                } else {
                        switch_mutex_lock(globals.mutex);
-                       for (hi = switch_core_hash_first( profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+                       for (hi = switch_core_hash_first(profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                                switch_core_hash_this(hi, &var, NULL, &val);
                                profile = val;
                                switch_file_close(profile->log_afd);
@@ -461,7 +461,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_logfile_shutdown)
        switch_log_unbind_logger(mod_logfile_logger);
        switch_event_unbind(&globals.node);
 
-       for (hi = switch_core_hash_first( profile_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(profile_hash); hi; hi = switch_core_hash_next(&hi)) {
                logfile_profile_t *profile;
                switch_core_hash_this(hi, &var, NULL, &val);
                if ((profile = (logfile_profile_t *) val)) {
index d966b441e7d82fa4b1d73d9b4a91855c23ab4f9c..b09a576ef81c247782b483f79587a25b5483a713 100644 (file)
@@ -1023,7 +1023,7 @@ SWITCH_DECLARE(const char *) switch_core_mime_ext2type(const char *ext)
 
 SWITCH_DECLARE(switch_hash_index_t *) switch_core_mime_index(void)
 {
-       return switch_core_hash_first( runtime.mime_types);
+       return switch_core_hash_first(runtime.mime_types);
 }
 
 SWITCH_DECLARE(switch_status_t) switch_core_mime_add_type(const char *type, const char *ext)
index e39b69d388319ee79141594703a723ff1c631484..343f43e6b354ed7eecf5b8f560c5d8f2db680c69 100644 (file)
@@ -205,9 +205,22 @@ SWITCH_DECLARE(void *) switch_core_hash_find_rdlock(switch_hash_t *hash, const c
        return val;
 }
 
-SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_first(switch_hash_t *hash)
+SWITCH_DECLARE(switch_bool_t) switch_core_hash_empty(switch_hash_t *hash)
 {
-       return switch_hashtable_first(hash);
+       switch_hash_index_t *hi = switch_core_hash_first(hash);
+
+       if (hi) {
+               switch_safe_free(hi);
+               return SWITCH_FALSE;
+       }
+
+       return SWITCH_TRUE;
+
+}
+
+SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_first_iter(switch_hash_t *hash, switch_hash_index_t *hi)
+{
+       return switch_hashtable_first_iter(hash, hi);
 }
 
 SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_next(switch_hash_index_t **hi)
index 346c54b09caedddbe80318108e5f61ba5d8ef041..5fa3feb3447478b46f9a227eb40f941f2d274983 100644 (file)
@@ -222,7 +222,7 @@ SWITCH_DECLARE(uint32_t) switch_core_session_hupall_matching_var_ans(const char
                return r;
 
        switch_mutex_lock(runtime.session_hash_mutex);
-       for (hi = switch_core_hash_first( session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if (val) {
                        session = (switch_core_session_t *) val;
@@ -275,7 +275,7 @@ SWITCH_DECLARE(switch_console_callback_match_t *) switch_core_session_findall_ma
        switch_core_new_memory_pool(&pool);
 
        switch_mutex_lock(runtime.session_hash_mutex);
-       for (hi = switch_core_hash_first( session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if (val) {
                        session = (switch_core_session_t *) val;
@@ -319,7 +319,7 @@ SWITCH_DECLARE(void) switch_core_session_hupall_endpoint(const switch_endpoint_i
        switch_core_new_memory_pool(&pool);
        
        switch_mutex_lock(runtime.session_hash_mutex);
-       for (hi = switch_core_hash_first( session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if (val) {
                        session = (switch_core_session_t *) val;
@@ -359,7 +359,7 @@ SWITCH_DECLARE(void) switch_core_session_hupall(switch_call_cause_t cause)
 
 
        switch_mutex_lock(runtime.session_hash_mutex);
-       for (hi = switch_core_hash_first( session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if (val) {
                        session = (switch_core_session_t *) val;
@@ -394,7 +394,7 @@ SWITCH_DECLARE(switch_console_callback_match_t *) switch_core_session_findall(vo
        switch_console_callback_match_t *my_matches = NULL;
 
        switch_mutex_lock(runtime.session_hash_mutex);
-       for (hi = switch_core_hash_first( session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(session_manager.session_table); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                if (val) {
                        session = (switch_core_session_t *) val;
index 2e5c9432617011d7c86bb3f95d966f3abaec891a..f55936fc46c6e3290d7d23b55a99ff6cc6a9771d 100644 (file)
@@ -576,7 +576,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_shutdown(void)
                }
        }
 
-       for (hi = switch_core_hash_first( CUSTOM_HASH); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(CUSTOM_HASH); hi; hi = switch_core_hash_next(&hi)) {
                switch_event_subclass_t *subclass;
                switch_core_hash_this(hi, &var, NULL, &val);
                if ((subclass = (switch_event_subclass_t *) val)) {
@@ -2686,14 +2686,14 @@ static uint32_t switch_event_channel_unsub_head(switch_event_channel_func_t func
 
 static void unsub_all_switch_event_channel(void)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        const void *var;
        void *val;
        switch_event_channel_sub_node_head_t *head;
 
        switch_thread_rwlock_wrlock(event_channel_manager.rwlock);
 
-       while ((hi = switch_core_hash_first( event_channel_manager.perm_hash))) {
+       while ((hi = switch_core_hash_first_iter( event_channel_manager.perm_hash, hi))) {
                switch_event_t *vals = NULL;
                switch_core_hash_this(hi, &var, NULL, &val);
                vals = (switch_event_t *) val;
@@ -2701,7 +2701,7 @@ static void unsub_all_switch_event_channel(void)
                switch_event_destroy(&vals);
        }
 
-       while ((hi = switch_core_hash_first( event_channel_manager.hash))) {
+       while ((hi = switch_core_hash_first_iter( event_channel_manager.hash, hi))) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                head = (switch_event_channel_sub_node_head_t *) val;
                switch_event_channel_unsub_head(NULL, head);
@@ -2724,7 +2724,7 @@ static uint32_t switch_event_channel_unsub_channel(switch_event_channel_func_t f
                switch_hash_index_t *hi;
                void *val;
 
-               for (hi = switch_core_hash_first( event_channel_manager.hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(event_channel_manager.hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, NULL, NULL, &val);
 
                        if (val) {
index 50383946fa6f17ee0b837ac5073960220d58ca11..ab56b1ebac77bcfa98746e1222fe60820829e83f 100644 (file)
@@ -294,11 +294,16 @@ SWITCH_DECLARE(switch_hashtable_iterator_t *) switch_hashtable_next(switch_hasht
        return NULL;
 }
 
-SWITCH_DECLARE(switch_hashtable_iterator_t *) switch_hashtable_first(switch_hashtable_t *h)
+SWITCH_DECLARE(switch_hashtable_iterator_t *) switch_hashtable_first_iter(switch_hashtable_t *h, switch_hashtable_iterator_t *it)
 {
        switch_hashtable_iterator_t *iterator;
 
-       switch_zmalloc(iterator, sizeof(*iterator));
+       if (it) {
+               iterator = it;
+       } else {
+               switch_zmalloc(iterator, sizeof(*iterator));
+       }
+
        switch_assert(iterator);
 
        iterator->pos = 0;
index 59756498c2dcabb61dc8541eb4d0d577f0ac7ae8..0f4b0aa6e6a4ff19b21e9b7e1f56de5cbc23a958 100644 (file)
@@ -118,7 +118,7 @@ static void switch_loadable_module_runtime(void)
        switch_loadable_module_t *module;
 
        switch_mutex_lock(loadable_modules.mutex);
-       for (hi = switch_core_hash_first( loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                module = (switch_loadable_module_t *) val;
 
@@ -620,7 +620,7 @@ static switch_status_t do_chat_send(switch_event_t *message_event)
        
        if (!switch_true(replying) && !switch_stristr("global", proto) && !switch_true(switch_event_get_header(message_event, "skip_global_process"))) {
                switch_mutex_lock(loadable_modules.mutex);
-               for (hi = switch_core_hash_first( loadable_modules.chat_hash); hi; hi = switch_core_hash_next(&hi)) {
+               for (hi = switch_core_hash_first(loadable_modules.chat_hash); hi; hi = switch_core_hash_next(&hi)) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        
                        if ((ci = (switch_chat_interface_t *) val)) {
@@ -647,6 +647,7 @@ static switch_status_t do_chat_send(switch_event_t *message_event)
                                }
                        }
                }
+               switch_safe_free(hi);
                switch_mutex_unlock(loadable_modules.mutex);
        }
        
@@ -1639,7 +1640,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_enumerate_loaded(switch_m
        switch_loadable_module_t *module;
 
        switch_mutex_lock(loadable_modules.mutex);
-       for (hi = switch_core_hash_first( loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                module = (switch_loadable_module_t *) val;
 
@@ -1986,7 +1987,7 @@ SWITCH_DECLARE(void) switch_loadable_module_shutdown(void)
        }
 
 
-       for (hi = switch_core_hash_first( loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                module = (switch_loadable_module_t *) val;
                if (!module->perm) {
@@ -1996,7 +1997,7 @@ SWITCH_DECLARE(void) switch_loadable_module_shutdown(void)
 
        switch_yield(1000000);
 
-       for (hi = switch_core_hash_first( loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(loadable_modules.module_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                module = (switch_loadable_module_t *) val;
                if (!module->perm) {
@@ -2196,7 +2197,7 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme
        const switch_codec_implementation_t *imp;
 
        switch_mutex_lock(loadable_modules.mutex);
-       for (hi = switch_core_hash_first( loadable_modules.codec_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(loadable_modules.codec_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, NULL, NULL, &val);
                codec_interface = (switch_codec_interface_t *) val;
                
@@ -2218,6 +2219,7 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme
                        break;
                }
        }
+       switch_safe_free(hi);
 
        switch_mutex_unlock(loadable_modules.mutex);
 
index 52939f65c9c25ec592836492ed53999de76d88be..44afd1bedc95054148af92df7324847d3b205366 100644 (file)
@@ -2017,7 +2017,7 @@ SWITCH_DECLARE(void) switch_rtp_shutdown(void)
 
        switch_mutex_lock(port_lock);
 
-       for (hi = switch_core_hash_first( alloc_hash); hi; hi = switch_core_hash_next(&hi)) {
+       for (hi = switch_core_hash_first(alloc_hash); hi; hi = switch_core_hash_next(&hi)) {
                switch_core_hash_this(hi, &var, NULL, &val);
                if ((alloc = (switch_core_port_allocator_t *) val)) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Destroy port allocator for %s\n", (char *) var);
index 94e998036f2e3445442609a09432ed4dd55230bd..62a34a365eebf59b1edb2a1b7827f434d1d73bba 100644 (file)
@@ -1945,7 +1945,7 @@ SWITCH_DECLARE(void) switch_xml_merge_user(switch_xml_t user, switch_xml_t domai
 
 SWITCH_DECLARE(uint32_t) switch_xml_clear_user_cache(const char *key, const char *user_name, const char *domain_name)
 {
-       switch_hash_index_t *hi;
+       switch_hash_index_t *hi = NULL;
        void *val;
        const void *var;
        char mega_key[1024];
@@ -1971,18 +1971,20 @@ SWITCH_DECLARE(uint32_t) switch_xml_clear_user_cache(const char *key, const char
 
        } else {
 
-               while ((hi = switch_core_hash_first( CACHE_HASH))) {
+               while ((hi = switch_core_hash_first_iter( CACHE_HASH, hi))) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        switch_xml_free(val);
                        switch_core_hash_delete(CACHE_HASH, var);
                        r++;
                }
 
-               while ((hi = switch_core_hash_first( CACHE_EXPIRES_HASH))) {
+               while ((hi = switch_core_hash_first_iter( CACHE_EXPIRES_HASH, hi))) {
                        switch_core_hash_this(hi, &var, NULL, &val);
                        switch_safe_free(val);
                        switch_core_hash_delete(CACHE_EXPIRES_HASH, var);
                }
+
+               switch_safe_free(hi);
        }
 
        switch_mutex_unlock(CACHE_MUTEX);