mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 11:26:16 +01:00
Optimize g_[s]list_free_full a bit
No need to iterate the list twice. Proposed by Luiz Augusto von Dentz, http://bugzilla.gnome.org/show_bug.cgi?id=653935
This commit is contained in:
parent
182ed95861
commit
98b667d052
@ -214,8 +214,13 @@ void
|
||||
g_list_free_full (GList *list,
|
||||
GDestroyNotify free_func)
|
||||
{
|
||||
g_list_foreach (list, (GFunc) free_func, NULL);
|
||||
g_list_free (list);
|
||||
while (list)
|
||||
{
|
||||
GList *next = list->next;
|
||||
(*free_func) (list->data);
|
||||
_g_list_free1 (list);
|
||||
list = next;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -197,17 +197,22 @@ g_slist_free_1 (GSList *list)
|
||||
* @list: a pointer to a #GSList
|
||||
* @free_func: the function to be called to free each element's data
|
||||
*
|
||||
* Convenience method, which frees all the memory used by a #GSList, and
|
||||
* calls the specified destroy function on every element's data.
|
||||
* Convenience method, which frees all the memory used by a #GSList,
|
||||
* and calls the specified destroy function on every element's data.
|
||||
*
|
||||
* Since: 2.28
|
||||
**/
|
||||
*/
|
||||
void
|
||||
g_slist_free_full (GSList *list,
|
||||
GDestroyNotify free_func)
|
||||
{
|
||||
g_slist_foreach (list, (GFunc) free_func, NULL);
|
||||
g_slist_free (list);
|
||||
while (list)
|
||||
{
|
||||
GSList *next = list->next;
|
||||
(*free_func) (list->data);
|
||||
_g_slist_free1 (list);
|
||||
list = next;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user