threads. gotta love 'em.

This commit is contained in:
Charles Kerr 2007-10-02 02:59:07 +00:00
parent af686b3297
commit 6ed2d25af7
2 changed files with 26 additions and 13 deletions

View File

@ -75,19 +75,32 @@ didWriteWrapper( struct bufferevent * e, void * userData )
static void
canReadWrapper( struct bufferevent * e, void * userData )
{
int done = 0;
tr_peerIo * c = (tr_peerIo *) userData;
tr_handle * handle = c->handle;
if( c->canRead == NULL )
return;
for( ;; ) {
tr_globalLock( handle );
while( !done )
{
const int ret = (*c->canRead)( e, c->userData );
switch( ret ) {
case READ_AGAIN: if( EVBUFFER_LENGTH( e->input ) ) continue; /* note fall-through */
case READ_MORE: tr_peerIoSetIOMode( c, EV_READ, 0 ); return; break;
case READ_DONE: return;
switch( ret )
{
case READ_AGAIN:
if( EVBUFFER_LENGTH( e->input ) )
continue;
case READ_MORE:
tr_peerIoSetIOMode( c, EV_READ, 0 );
case READ_DONE:
done = 1;
}
}
tr_globalUnlock( handle );
}
static void

View File

@ -1044,10 +1044,10 @@ freeWhenStopped( void * vtor )
return FALSE;
}
static void
tr_torrentStopImpl( void * vtor )
void
tr_torrentStop( tr_torrent * tor )
{
tr_torrent * tor = vtor;
tr_globalLock( tor->handle );
switch( tor->runStatus )
{
@ -1069,21 +1069,21 @@ tr_torrentStopImpl( void * vtor )
case TR_RUN_STOPPED:
break;
}
}
void
tr_torrentStop( tr_torrent * tor )
{
tr_torrentStopImpl( tor );
tr_globalUnlock( tor->handle );
}
void
tr_torrentClose( tr_torrent * tor )
{
tr_globalLock( tor->handle );
tor->runStatusToSave = tor->runStatus;
tor->runStatusToSaveIsSet = TRUE;
tr_torrentStop( tor );
tr_timerNew( tor->handle, freeWhenStopped, tor, 250 );
tr_globalUnlock( tor->handle );
}
/**