fix TrTorrent reference count error

This commit is contained in:
Charles Kerr 2008-02-15 18:20:56 +00:00
parent 6a5789b410
commit e52c1d9727
2 changed files with 28 additions and 30 deletions

View File

@ -357,30 +357,6 @@ enabled_toggled (GtkCellRendererToggle * cell UNUSED,
gtk_tree_path_free( path );
}
static void
torrentDestroyed( gpointer gdata, GObject * deadTorrent UNUSED )
{
FileData * data = gdata;
data->gtor = NULL;
file_list_set_torrent( data->top, NULL );
}
static void
freeData( gpointer gdata )
{
FileData * data = gdata;
if( data->timeout_tag ) {
g_source_remove( data->timeout_tag );
data->timeout_tag = 0;
}
if( data->gtor != NULL )
g_object_weak_unref( G_OBJECT( data->gtor ), torrentDestroyed, data );
g_free( data );
}
static gboolean
refreshModel( gpointer gdata )
{
@ -405,6 +381,17 @@ refreshModel( gpointer gdata )
return TRUE;
}
static void
clearData( FileData * data )
{
data->gtor = NULL;
if( data->timeout_tag ) {
g_source_remove( data->timeout_tag );
data->timeout_tag = 0;
}
}
void
file_list_set_torrent( GtkWidget * w, TrTorrent * gtor )
{
@ -413,6 +400,9 @@ file_list_set_torrent( GtkWidget * w, TrTorrent * gtor )
data = g_object_get_data( G_OBJECT( w ), "file-data" );
/* unset the old fields */
clearData( data );
/* instantiate the model */
store = gtk_tree_store_new ( N_FILE_COLS,
G_TYPE_STRING, /* stock */
@ -427,10 +417,6 @@ file_list_set_torrent( GtkWidget * w, TrTorrent * gtor )
data->model = GTK_TREE_MODEL( store );
data->gtor = gtor;
if( data->timeout_tag ) {
g_source_remove( data->timeout_tag );
data->timeout_tag = 0;
}
/* populate the model */
if( gtor )
@ -438,7 +424,6 @@ file_list_set_torrent( GtkWidget * w, TrTorrent * gtor )
int i;
const tr_info * inf = tr_torrent_info( gtor );
tr_torrent * tor = tr_torrent_handle( gtor );
g_object_weak_ref( G_OBJECT( gtor ), torrentDestroyed, data );
for( i=0; inf && i<inf->fileCount; ++i )
{
@ -456,6 +441,14 @@ file_list_set_torrent( GtkWidget * w, TrTorrent * gtor )
gtk_tree_view_expand_all( GTK_TREE_VIEW( data->view ) );
}
static void
freeData( gpointer gdata )
{
FileData * data = gdata;
clearData( data );
g_free( data );
}
GtkWidget *
file_list_new( TrTorrent * gtor )
{

View File

@ -34,9 +34,14 @@ deleteOldTorrent( struct OpenData * data )
{
if( data->gtor )
{
tr_torrent * tor = tr_torrent_handle( data->gtor );
tr_torrent * tor;
file_list_set_torrent( data->list, NULL );
tor = tr_torrent_handle( data->gtor );
tr_torrentRemoveSaved( tor );
tr_torrentClose( tor );
g_object_unref( G_OBJECT( data->gtor ) );
data->gtor = NULL;
}