diff --git a/gtk/my-valgrind.sh b/gtk/my-valgrind.sh index 7c6d9b340..cfa49738f 100755 --- a/gtk/my-valgrind.sh +++ b/gtk/my-valgrind.sh @@ -2,4 +2,4 @@ export G_SLICE=always-malloc export G_DEBUG=gc-friendly export GLIBCXX_FORCE_NEW=1 -valgrind --tool=memcheck --leak-check=full --leak-resolution=high --num-callers=48 --log-file=x-valgrind --show-reachable=yes ./transmission -g /tmp/test +valgrind --tool=memcheck --leak-check=full --leak-resolution=high --num-callers=48 --log-file=x-valgrind --show-reachable=yes ./transmission diff --git a/gtk/tr-prefs.c b/gtk/tr-prefs.c index d40f3c5b4..ba85af6c4 100644 --- a/gtk/tr-prefs.c +++ b/gtk/tr-prefs.c @@ -743,6 +743,17 @@ onLaunchClutchCB( GtkButton * w UNUSED, g_free( url ); } +static void +remotePageFree( gpointer gpage ) +{ + struct remote_page * page = gpage; + + g_slist_free( page->widgets ); + g_slist_free( page->auth_widgets ); + g_slist_free( page->whitelist_widgets ); + g_free( page ); +} + static GtkWidget* webPage( GObject * core ) { @@ -756,7 +767,7 @@ webPage( GObject * core ) page->core = TR_CORE( core ); t = hig_workarea_create( ); - g_object_set_data_full( G_OBJECT( t ), "page", page, g_free ); + g_object_set_data_full( G_OBJECT( t ), "page", page, remotePageFree ); hig_workarea_add_section_title( t, &row, _( "Web Client" ) ); diff --git a/gtk/tr-window.c b/gtk/tr-window.c index b8a857ffc..2be709ca7 100644 --- a/gtk/tr-window.c +++ b/gtk/tr-window.c @@ -910,6 +910,7 @@ tr_window_new( GtkUIManager * ui_mgr, TrCore * core ) sexy_icon_entry_set_icon( SEXY_ICON_ENTRY( s ), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE( w ) ); + g_object_unref( w ); sexy_icon_entry_set_icon_highlight( SEXY_ICON_ENTRY( s ), SEXY_ICON_ENTRY_PRIMARY, TRUE ); #else diff --git a/gtk/util.c b/gtk/util.c index 387667b0f..3aa3407dd 100644 --- a/gtk/util.c +++ b/gtk/util.c @@ -673,7 +673,7 @@ gtr_thread_func( gpointer data ) gdk_threads_leave( ); if( !more ) - g_free( data ); + g_slice_free( struct gtr_func_data, data ); return more; } @@ -685,7 +685,7 @@ gtr_idle_add( GSourceFunc function, gpointer data ) #if GTK_CHECK_VERSION( 2,12,0 ) gdk_threads_add_idle( function, data ); #else - struct gtr_func_data * d = g_new( struct gtr_func_data, 1 ); + struct gtr_func_data * d = g_slice_new( struct gtr_func_data ); d->function = function; d->data = data; g_idle_add( gtr_thread_func, d );