Revision
14598
Author
mrene
Date
2009-08-22 14:26:58 -0500 (Sat, 22 Aug 2009)

Log Message

refactor mod_event_socket so it uses switch_log functions to duplicate and free log nodes while it uses them internally (fix bad ptr for userdata on event socket listeners)

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_log.h (14597 => 14598)


--- freeswitch/trunk/src/include/switch_log.h	2009-08-22 17:56:48 UTC (rev 14597)
+++ freeswitch/trunk/src/include/switch_log.h	2009-08-22 19:26:58 UTC (rev 14598)
@@ -143,6 +143,10 @@
 SWITCH_DECLARE(uint32_t) switch_log_str2mask(_In_z_ const char *str);
 #define switch_log_check_mask(_mask, _level) (_mask & (1 << _level))
 
+
+SWITCH_DECLARE(switch_log_node_t*) switch_log_node_dup(const switch_log_node_t *node);
+SWITCH_DECLARE(void) switch_log_node_free(switch_log_node_t **pnode);
+
 ///\}
 SWITCH_END_EXTERN_C
 #endif

Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (14597 => 14598)


--- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2009-08-22 17:56:48 UTC (rev 14597)
+++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2009-08-22 19:26:58 UTC (rev 14598)
@@ -144,12 +144,7 @@
 	switch_mutex_lock(globals.listener_mutex);
 	for (l = listen_list.listeners; l; l = l->next) {
 		if (switch_test_flag(l, LFLAG_LOG) && l->level >= node->level) {
-			switch_log_node_t *dnode = malloc(sizeof(*node));
-
-			switch_assert(dnode);
-			*dnode = *node;
-			dnode->data = strdup(node->data);
-			switch_assert(dnode->data);
+			switch_log_node_t *dnode = switch_log_node_dup(node);			
 			
 			if (switch_queue_trypush(l->log_queue, dnode) == SWITCH_STATUS_SUCCESS) {
 				if (l->lost_logs) {
@@ -163,8 +158,7 @@
 					}
 				}
 			} else {
-				switch_safe_free(dnode->data);
-				switch_safe_free(dnode);
+				switch_log_node_free(&dnode);
 				l->lost_logs++;
 			}
 		}
@@ -182,8 +176,7 @@
 		while (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) {
 			switch_log_node_t *dnode = (switch_log_node_t *) pop;
 			if (dnode) {
-				free(dnode->data);
-				free(dnode);
+				switch_log_node_free(&dnode);
 			}
 		}
 	}
@@ -889,8 +882,7 @@
 									   encode_buf
 									   );
 				free(encode_buf);
-				free(dnode->data);
-				free(dnode);
+				switch_log_node_free(&dnode);
 			}
 
 			stream->write_function(stream, "</log_data>\n");
@@ -1168,10 +1160,9 @@
 						switch_socket_send(listener->sock, buf, &len);
 						len = strlen(dnode->data);
 						switch_socket_send(listener->sock, dnode->data, &len);
-
-						free(dnode->data);
-						free(dnode);
 					}
+					
+					switch_log_node_free(&dnode);
 					do_sleep = 0;
 				}
 			}

Modified: freeswitch/trunk/src/switch_log.c (14597 => 14598)


--- freeswitch/trunk/src/switch_log.c	2009-08-22 17:56:48 UTC (rev 14597)
+++ freeswitch/trunk/src/switch_log.c	2009-08-22 19:26:58 UTC (rev 14598)
@@ -97,8 +97,27 @@
 	return node;
 }
 
-static void switch_log_node_free(switch_log_node_t **pnode)
+SWITCH_DECLARE(switch_log_node_t*) switch_log_node_dup(const switch_log_node_t *node)
 {
+	switch_log_node_t *newnode = switch_log_node_alloc();
+	
+	*newnode = *node;
+	
+	if (!switch_strlen_zero(node->data)) {
+		newnode->data = strdup(node->data);	
+		switch_assert(node->data);
+	}
+	
+	if (!switch_strlen_zero(node->userdata)) {
+		newnode->userdata = strdup(node->userdata);
+		switch_assert(node->userdata);
+	}
+	
+	return newnode;
+}
+
+SWITCH_DECLARE(void) switch_log_node_free(switch_log_node_t **pnode)
+{
 	switch_log_node_t *node;
 	
 	if (!pnode) {
@@ -284,6 +303,7 @@
 		switch_mutex_unlock(BINDLOCK);
 
 		switch_log_node_free(&node);
+
 	}
 
 	THREAD_RUNNING = 0;