From 29cb590c28c5dea850c47e705875014c05fff371 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 15 Apr 2008 15:51:59 +0000 Subject: [PATCH] #879: fix segfault if tracker is freed immediately after starting a torrent --- libtransmission/tracker.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/libtransmission/tracker.c b/libtransmission/tracker.c index aedc65c5a..13e0ade04 100644 --- a/libtransmission/tracker.c +++ b/libtransmission/tracker.c @@ -1141,17 +1141,17 @@ onTrackerFreeNow( void * vt ) tr_free( t ); } -void -tr_trackerFree( tr_tracker * t ) -{ - tr_runInEventThread( t->handle, onTrackerFreeNow, t ); -} - - /*** **** PUBLIC ***/ +void +tr_trackerFree( tr_tracker * t ) +{ + if( t ) + tr_runInEventThread( t->handle, onTrackerFreeNow, t ); +} + tr_publisher_tag tr_trackerSubscribe( tr_tracker * t, tr_delivery_func func, @@ -1164,7 +1164,8 @@ void tr_trackerUnsubscribe( tr_tracker * t, tr_publisher_tag tag ) { - tr_publisherUnsubscribe( t->publisher, tag ); + if( t ) + tr_publisherUnsubscribe( t->publisher, tag ); } const tr_tracker_info * @@ -1206,12 +1207,15 @@ tr_trackerGetCounts( const tr_tracker * t, void tr_trackerStart( tr_tracker * t ) { - tr_free( t->peer_id ); - t->peer_id = tr_peerIdNew( ); + if( t ) + { + tr_free( t->peer_id ); + t->peer_id = tr_peerIdNew( ); - if( t->isRunning == 0 ) { - t->isRunning = 1; - enqueueRequest( t->handle, t, TR_REQ_STARTED ); + if( t->isRunning == 0 ) { + t->isRunning = 1; + enqueueRequest( t->handle, t, TR_REQ_STARTED ); + } } } @@ -1230,7 +1234,7 @@ tr_trackerCompleted( tr_tracker * t ) void tr_trackerStop( tr_tracker * t ) { - if( t->isRunning ) { + if( t && t->isRunning ) { t->isRunning = 0; t->reannounceAt = t->manualAnnounceAllowedAt = 0; enqueueRequest( t->handle, t, TR_REQ_STOPPED );