]> granicus.if.org Git - transmission/commitdiff
(trunk libT) add more assertions to make Biiaru crash more^H^H^H^H^H^H^H^H^H^H^H...
authorCharles Kerr <charles@transmissionbt.com>
Mon, 26 Jan 2009 02:51:50 +0000 (02:51 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Mon, 26 Jan 2009 02:51:50 +0000 (02:51 +0000)
libtransmission/peer-io.c
libtransmission/session.c
libtransmission/trevent.c

index 707dc0894de1eaa199d4fa2598324eda6fc38014..f740d0127981990a0ce97f4062ccf51c688f60d0 100644 (file)
@@ -420,7 +420,10 @@ static void
 io_dtor( void * vio )
 {
     tr_peerIo * io = vio;
+
     assert( tr_isPeerIo( io ) );
+    assert( tr_amInEventThread( io->session ) );
+    assert( io->session->events != NULL );
 
     dbgmsg( io, "in tr_peerIo destructor" );
     event_del( &io->event_read );
@@ -844,6 +847,8 @@ tr_peerIoFlush( tr_peerIo  * io, tr_direction dir, size_t limit )
 static void
 event_enable( tr_peerIo * io, short event )
 {
+    assert( tr_amInEventThread( io->session ) );
+    assert( io->session->events != NULL );
     assert( event_initialized( &io->event_read ) );
     assert( event_initialized( &io->event_write ) );
 
@@ -865,6 +870,8 @@ event_enable( tr_peerIo * io, short event )
 static void
 event_disable( struct tr_peerIo * io, short event )
 {
+    assert( tr_amInEventThread( io->session ) );
+    assert( io->session->events != NULL );
     assert( event_initialized( &io->event_read ) );
     assert( event_initialized( &io->event_write ) );
 
@@ -893,6 +900,8 @@ tr_peerIoSetEnabled( tr_peerIo    * io,
 
     assert( tr_isPeerIo( io ) );
     assert( tr_isDirection( dir ) );
+    assert( tr_amInEventThread( io->session ) );
+    assert( io->session->events != NULL );
 
     if( isEnabled )
         event_enable( io, event );
index ff72aa2ad06cda22e8b59b38151d5802de65376a..e8abd2c2befc9c8bfaf426842dfcdb1c220a8226 100644 (file)
@@ -455,10 +455,8 @@ tr_sessionInit( const char  * tag,
     tr_setConfigDir( session, configDir ); 
 
     tr_netInit( ); /* must go before tr_eventInit */
-
     tr_eventInit( session );
-    while( !session->events )
-        tr_wait( 50 );
+    assert( session->events != NULL );
 
     session->peerMgr = tr_peerMgrNew( session );
 
index 7a958800d10f678e6485aa8d8afcce449c5edd9e..2ed25d8311e68f43052268cbcfc9339b8728f9d3 100644 (file)
@@ -232,7 +232,6 @@ static void
 libeventThreadFunc( void * veh )
 {
     tr_event_handle * eh = veh;
-
     tr_dbg( "Starting libevent thread" );
 
 #ifndef WIN32
@@ -240,16 +239,18 @@ libeventThreadFunc( void * veh )
     signal( SIGPIPE, SIG_IGN );
 #endif
 
+    eh->base = event_init( );
     eh->session->events = eh;
 
     /* listen to the pipe's read fd */
-    event_set( &eh->pipeEvent, eh->fds[0], EV_READ | EV_PERSIST,
-               readFromPipe,
-               veh );
+    event_set( &eh->pipeEvent, eh->fds[0], EV_READ | EV_PERSIST, readFromPipe, veh );
     event_add( &eh->pipeEvent, NULL );
     event_set_log_callback( logFunc );
+
+    /* loop until all the events are done */
     event_dispatch( );
 
+    /* shut down the thread */
     tr_lockFree( eh->lock );
     event_base_free( eh->base );
     eh->session->events = NULL;
@@ -262,12 +263,17 @@ tr_eventInit( tr_session * session )
 {
     tr_event_handle * eh;
 
+    session->events = NULL;
+
     eh = tr_new0( tr_event_handle, 1 );
     eh->lock = tr_lockNew( );
     pipe( eh->fds );
     eh->session = session;
-    eh->base = event_init( );
     eh->thread = tr_threadNew( libeventThreadFunc, eh );
+
+    /* wait until the libevent thread is running */
+    while( session->events == NULL )
+        tr_wait( 100 );
 }
 
 void