]> granicus.if.org Git - transmission/commitdiff
(trunk libT) make sure tr_sessionSetDHTEnabled() doesn't make libevent calls outside...
authorCharles Kerr <charles@transmissionbt.com>
Fri, 12 Jun 2009 22:17:59 +0000 (22:17 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Fri, 12 Jun 2009 22:17:59 +0000 (22:17 +0000)
libtransmission/session.c

index 15494887d3ec277faa9f840aa366b5415988d500..205aec7d02161fd784ff36fc211ab50942a9543a 100644 (file)
@@ -1598,21 +1598,29 @@ tr_sessionIsDHTEnabled( const tr_session * session )
     return session->isDHTEnabled;
 }
 
-void
-tr_sessionSetDHTEnabled( tr_session * session, tr_bool enabled )
+static void
+toggleDHTImpl(  void * data )
 {
+    tr_session * session = data;
     assert( tr_isSession( session ) );
 
-    if( ( enabled!=0 ) != (session->isDHTEnabled!=0) )
-    {
-        if( session->isDHTEnabled )
-            tr_dhtUninit( session );
+    if( session->isDHTEnabled )
+        tr_dhtUninit( session );
 
-        session->isDHTEnabled = enabled!=0;
+    session->isDHTEnabled = !session->isDHTEnabled;
 
-        if( session->isDHTEnabled )
-            tr_dhtInit( session );
-    }
+    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 ) )
+        tr_runInEventThread( session, toggleDHTImpl, session );
 }
 
 /***