Skip to content
Snippets Groups Projects
Commit edba1f4d authored by Tristan Matthews's avatar Tristan Matthews
Browse files

* #6893: fixes segfault in client on clean history

Caused by double free.
parent 26db78d8
No related branches found
No related tags found
No related merge requests found
...@@ -90,7 +90,7 @@ calllist_free_element(gpointer data, gpointer user_data UNUSED) ...@@ -90,7 +90,7 @@ calllist_free_element(gpointer data, gpointer user_data UNUSED)
free_conference_obj_t (element->elem.conf); free_conference_obj_t (element->elem.conf);
else /* HIST_CALL */ else /* HIST_CALL */
free_callable_obj_t (element->elem.call); free_callable_obj_t (element->elem.call);
free (element); g_free (element);
} }
void void
...@@ -110,7 +110,7 @@ calllist_reset (calltab_t* tab) ...@@ -110,7 +110,7 @@ calllist_reset (calltab_t* tab)
void calllist_add_history_call (callable_obj_t *obj) void calllist_add_history_call (callable_obj_t *obj)
{ {
if (eel_gconf_get_integer (HISTORY_ENABLED)) { if (eel_gconf_get_integer (HISTORY_ENABLED)) {
QueueElement *element = malloc(sizeof(QueueElement)); QueueElement *element = g_new0(QueueElement, 1);
element->type = HIST_CALL; element->type = HIST_CALL;
element->elem.call = obj; element->elem.call = obj;
g_queue_push_tail (history->callQueue, (gpointer) element); g_queue_push_tail (history->callQueue, (gpointer) element);
...@@ -121,7 +121,7 @@ void calllist_add_history_call (callable_obj_t *obj) ...@@ -121,7 +121,7 @@ void calllist_add_history_call (callable_obj_t *obj)
void calllist_add_history_conference(conference_obj_t *obj) void calllist_add_history_conference(conference_obj_t *obj)
{ {
if(eel_gconf_get_integer (HISTORY_ENABLED)) { if(eel_gconf_get_integer (HISTORY_ENABLED)) {
QueueElement *element = malloc(sizeof(QueueElement)); QueueElement *element = g_new0(QueueElement, 1);
element->type = HIST_CONFERENCE; element->type = HIST_CONFERENCE;
element->elem.conf = obj; element->elem.conf = obj;
g_queue_push_tail (history->callQueue, (gpointer) element); g_queue_push_tail (history->callQueue, (gpointer) element);
...@@ -134,7 +134,7 @@ calllist_add_call (calltab_t* tab, callable_obj_t * c) ...@@ -134,7 +134,7 @@ calllist_add_call (calltab_t* tab, callable_obj_t * c)
{ {
DEBUG("Calllist: Add Call %s", c->_callID); DEBUG("Calllist: Add Call %s", c->_callID);
QueueElement *element = malloc(sizeof(QueueElement)); QueueElement *element = g_new0(QueueElement, 1);
element->type = HIST_CALL; element->type = HIST_CALL;
element->elem.call = c; element->elem.call = c;
g_queue_push_tail(tab->callQueue, (gpointer) element); g_queue_push_tail(tab->callQueue, (gpointer) element);
...@@ -146,14 +146,11 @@ calllist_clean_history (void) ...@@ -146,14 +146,11 @@ calllist_clean_history (void)
guint size = calllist_get_size (history); guint size = calllist_get_size (history);
for (guint i = 0; i < size; i++) { for (guint i = 0; i < size; i++) {
QueueElement* c = calllist_get_nth(history, i); QueueElement* c = calllist_get_nth(history, i);
if(c->type == HIST_CALL) { if (c->type == HIST_CALL)
calltree_remove_call (history, c->elem.call, NULL); calltree_remove_call (history, c->elem.call, NULL);
} else if(c->type == HIST_CONFERENCE)
else if(c->type == HIST_CONFERENCE) {
calltree_remove_conference (history, c->elem.conf, NULL); calltree_remove_conference (history, c->elem.conf, NULL);
} }
free(c);
}
calllist_reset (history); calllist_reset (history);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment