mirror of
https://github.com/transmission/transmission
synced 2024-12-26 01:27:28 +00:00
(trunk libT) possible fix for the `few peers' errors reported on OS X. denis_, merlyn3d, give this a spin...
This commit is contained in:
parent
b484b77b90
commit
69f59b423a
2 changed files with 17 additions and 4 deletions
|
@ -190,6 +190,8 @@ event_read_cb( int fd, short event UNUSED, void * vio )
|
|||
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
io->hasFinishedConnecting = TRUE;
|
||||
|
||||
curlen = EVBUFFER_LENGTH( io->inbuf );
|
||||
howmuch = curlen >= max ? 0 : max - curlen;
|
||||
howmuch = tr_bandwidthClamp( &io->bandwidth, TR_DOWN, howmuch );
|
||||
|
@ -270,6 +272,8 @@ event_write_cb( int fd, short event UNUSED, void * vio )
|
|||
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
io->hasFinishedConnecting = TRUE;
|
||||
|
||||
dbgmsg( io, "libevent says this peer is ready to write" );
|
||||
|
||||
/* Write as much as possible, since the socket is non-blocking, write() will
|
||||
|
@ -352,6 +356,7 @@ tr_peerIoNew( tr_session * session,
|
|||
io->port = port;
|
||||
io->socket = socket;
|
||||
io->isIncoming = isIncoming != 0;
|
||||
io->hasFinishedConnecting = FALSE;
|
||||
io->timeCreated = time( NULL );
|
||||
io->inbuf = evbuffer_new( );
|
||||
io->outbuf = evbuffer_new( );
|
||||
|
@ -821,10 +826,13 @@ tr_peerIoFlush( tr_peerIo * io, tr_direction dir, size_t limit )
|
|||
assert( tr_isPeerIo( io ) );
|
||||
assert( tr_isDirection( dir ) );
|
||||
|
||||
if( dir == TR_DOWN )
|
||||
bytesUsed = tr_peerIoTryRead( io, limit );
|
||||
else
|
||||
bytesUsed = tr_peerIoTryWrite( io, limit );
|
||||
if( io->hasFinishedConnecting )
|
||||
{
|
||||
if( dir == TR_DOWN )
|
||||
bytesUsed = tr_peerIoTryRead( io, limit );
|
||||
else
|
||||
bytesUsed = tr_peerIoTryWrite( io, limit );
|
||||
}
|
||||
|
||||
dbgmsg( io, "flushing peer-io, direction %d, limit %zu, bytesUsed %zd", (int)dir, limit, bytesUsed );
|
||||
return bytesUsed;
|
||||
|
|
|
@ -64,6 +64,11 @@ typedef struct tr_peerIo
|
|||
tr_bool extendedProtocolSupported;
|
||||
tr_bool fastExtensionSupported;
|
||||
|
||||
/* we create the socket in a nonblocking way, so this flag is initially
|
||||
* false and then set to true when libevent says that the socket is ready
|
||||
* for reading or writing */
|
||||
tr_bool hasFinishedConnecting;
|
||||
|
||||
int magicNumber;
|
||||
|
||||
uint8_t encryptionMode;
|
||||
|
|
Loading…
Reference in a new issue