diff -r 6cb675dea5fb -r 5c650ae458df libgaim/prefs.c --- a/libgaim/prefs.c Tue Nov 21 21:05:44 2006 +0000 +++ b/libgaim/prefs.c Wed Nov 22 00:43:42 2006 +0000 @@ -617,6 +617,7 @@ remove_pref(struct gaim_pref *pref) { char *name; + GSList *l; if(!pref || pref == &prefs) return; @@ -643,7 +644,11 @@ free_pref_value(pref); - g_slist_free(pref->callbacks); + while((l = pref->callbacks) != NULL) { + pref->callbacks = pref->callbacks->next; + g_free(l->data); + g_slist_free_1(l); + } g_free(pref->name); g_free(pref); } @@ -1008,6 +1013,9 @@ struct pref_cb *cb; static guint cb_id = 0; + g_return_val_if_fail(name != NULL, 0); + g_return_val_if_fail(func != NULL, 0); + pref = find_pref(name); if (pref == NULL) return 0;