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;