sync our shutdown code to BentMyWookie's latest tr_close() changes.

This commit is contained in:
Charles Kerr
2007-11-09 16:11:10 +00:00
parent 4792788d24
commit 14bd1d7408
3 changed files with 35 additions and 163 deletions

View File

@@ -122,39 +122,12 @@ tr_core_dispose( GObject * obj )
{
TrCore * self = (TrCore *) obj;
GObjectClass * parent;
GtkTreeIter iter;
TrTorrent * tor;
if( self->disposed )
{
return;
}
self->disposed = TRUE;
pref_save( NULL );
#ifdef REFDBG
fprintf( stderr, "core %p dispose\n", self );
#endif
/* sever all remaining torrents in the model */
if( gtk_tree_model_get_iter_first( self->model, &iter ) ) do
{
gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 );
tr_torrent_sever( tor );
g_object_unref( tor );
}
while( gtk_tree_model_iter_next( self->model, &iter ) );
g_object_unref( self->model );
#ifdef REFDBG
fprintf( stderr, "core %p dead\n", self );
#endif
/* close the libtransmission instance */
tr_close( self->handle );
/* Chain up to the parent class */
parent = g_type_class_peek( g_type_parent( TR_CORE_TYPE ) );
parent->dispose( obj );
}
@@ -373,49 +346,6 @@ tr_core_handle( TrCore * self )
return self->disposed ? NULL : self->handle;
}
void
tr_core_shutdown( TrCore * self )
{
GtkTreeIter iter;
TR_IS_CORE( self );
if( self->disposed )
return;
g_assert( !self->quitting );
self->quitting = TRUE;
/* try to stop all the torrents nicely */
if ( gtk_tree_model_get_iter_first( self->model, &iter) ) do {
TrTorrent * tor;
gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 );
tr_torrent_sever( tor );
g_object_unref( tor );
} while( gtk_list_store_remove( GTK_LIST_STORE(self->model), &iter ) );
/* shut down nat traversal */
tr_natTraversalEnable( self->handle, 0 );
}
gboolean
tr_core_quiescent( TrCore * self )
{
const tr_handle_status * hstat;
TR_IS_CORE( self );
g_assert( self->quitting );
if( self->disposed )
return TRUE;
if ( tr_torrentCount( self->handle ) != 0 )
return FALSE;
hstat = tr_handleStatus( self->handle );
return TR_NAT_TRAVERSAL_DISABLED == hstat->natTraversalStatus;
}
static void
tr_core_insert( TrCore * self, TrTorrent * tor )
{