(trunk libT) make sure tr_sessionSetDHTEnabled() doesn't make libevent calls outside of the libevent thread

This commit is contained in:
Charles Kerr 2009-06-12 22:17:59 +00:00
parent 6f40f83a1f
commit 8f1d036fa3
1 changed files with 18 additions and 10 deletions

View File

@ -1598,21 +1598,29 @@ tr_sessionIsDHTEnabled( const tr_session * session )
return session->isDHTEnabled;
}
static void
toggleDHTImpl( void * data )
{
tr_session * session = data;
assert( tr_isSession( session ) );
if( session->isDHTEnabled )
tr_dhtUninit( session );
session->isDHTEnabled = !session->isDHTEnabled;
if( session->isDHTEnabled )
tr_dhtInit( session );
}
void
tr_sessionSetDHTEnabled( tr_session * session, tr_bool enabled )
{
assert( tr_isSession( session ) );
assert( tr_isBool( enabled ) );
if( ( enabled!=0 ) != (session->isDHTEnabled!=0) )
{
if( session->isDHTEnabled )
tr_dhtUninit( session );
session->isDHTEnabled = enabled!=0;
if( session->isDHTEnabled )
tr_dhtInit( session );
}
if( ( enabled != 0 ) != ( session->isDHTEnabled != 0 ) )
tr_runInEventThread( session, toggleDHTImpl, session );
}
/***