From: Charles Kerr Date: Fri, 24 Dec 2010 08:58:41 +0000 (+0000) Subject: (trunk libT) #3836 "libevent2 support" -- finish moving to the libevent2 API mode... X-Git-Tag: 2.20b1~141 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae84dc70dd4cf908bd9369b1ef87f78637c3dd2c;p=transmission (trunk libT) #3836 "libevent2 support" -- finish moving to the libevent2 API mode. don't include the backwards-compatable API headers. --- diff --git a/libtransmission/JSON_parser.c b/libtransmission/JSON_parser.c index 1c009169a..b86e310bc 100644 --- a/libtransmission/JSON_parser.c +++ b/libtransmission/JSON_parser.c @@ -69,7 +69,7 @@ SOFTWARE. #include #include /* some 1.4.x versions of evutil.h need this */ -#include /* evutil_strtoll() */ +#include /* evutil_strtoll() */ #include "JSON_parser.h" diff --git a/libtransmission/announcer.c b/libtransmission/announcer.c index 08648c728..53f03399b 100644 --- a/libtransmission/announcer.c +++ b/libtransmission/announcer.c @@ -264,7 +264,7 @@ tr_announcerInit( tr_session * session ) a->session = session; a->slotsAvailable = MAX_CONCURRENT_TASKS; a->lpdHouseKeepingAt = relaxUntil; - a->upkeepTimer = evtimer_new( NULL, onUpkeepTimer, a ); + a->upkeepTimer = evtimer_new( session->event_base, onUpkeepTimer, a ); tr_timerAdd( a->upkeepTimer, UPKEEP_INTERVAL_SECS, 0 ); session->announcer = a; diff --git a/libtransmission/handshake.c b/libtransmission/handshake.c index aab2531dd..772616346 100644 --- a/libtransmission/handshake.c +++ b/libtransmission/handshake.c @@ -1165,12 +1165,13 @@ handshakeTimeout( int foo UNUSED, short bar UNUSED, void * handshake ) } tr_handshake* -tr_handshakeNew( tr_peerIo * io, - tr_encryption_mode encryptionMode, - handshakeDoneCB doneCB, - void * doneUserData ) +tr_handshakeNew( tr_peerIo * io, + tr_encryption_mode encryptionMode, + handshakeDoneCB doneCB, + void * doneUserData ) { tr_handshake * handshake; + tr_session * session = tr_peerIoGetSession( io ); handshake = tr_new0( tr_handshake, 1 ); handshake->io = io; @@ -1178,8 +1179,8 @@ tr_handshakeNew( tr_peerIo * io, handshake->encryptionMode = encryptionMode; handshake->doneCB = doneCB; handshake->doneUserData = doneUserData; - handshake->session = tr_peerIoGetSession( io ); - handshake->timeout_timer = evtimer_new( NULL, handshakeTimeout, handshake ); + handshake->session = session; + handshake->timeout_timer = evtimer_new( session->event_base, handshakeTimeout, handshake ); tr_timerAdd( handshake->timeout_timer, HANDSHAKE_TIMEOUT_SEC, 0 ); tr_peerIoRef( io ); /* balanced by the unref in tr_handshakeFree */ diff --git a/libtransmission/net.c b/libtransmission/net.c index a7bc6a798..25cb7ce95 100644 --- a/libtransmission/net.c +++ b/libtransmission/net.c @@ -44,8 +44,7 @@ #endif #include -#include /* some 1.4.x versions of evutil.h need this */ -#include +#include #include "transmission.h" #include "fdlimit.h" diff --git a/libtransmission/peer-io.c b/libtransmission/peer-io.c index 05a6a0bdb..133ed637c 100644 --- a/libtransmission/peer-io.c +++ b/libtransmission/peer-io.c @@ -394,8 +394,8 @@ tr_peerIoNew( tr_session * session, io->timeCreated = tr_time( ); io->inbuf = evbuffer_new( ); io->outbuf = evbuffer_new( ); - io->event_read = event_new( NULL, io->socket, EV_READ, event_read_cb, io ); - io->event_write = event_new( NULL, io->socket, EV_WRITE, event_write_cb, io ); + io->event_read = event_new( session->event_base, io->socket, EV_READ, event_read_cb, io ); + io->event_write = event_new( session->event_base, io->socket, EV_WRITE, event_write_cb, io ); tr_bandwidthConstruct( &io->bandwidth, session, parent ); tr_bandwidthSetPeer( &io->bandwidth, io ); dbgmsg( io, "bandwidth is %p; its parent is %p", &io->bandwidth, parent ); @@ -644,8 +644,8 @@ tr_peerIoReconnect( tr_peerIo * io ) event_del( io->event_read ); event_del( io->event_write ); io->socket = tr_netOpenPeerSocket( session, &io->addr, io->port, io->isSeed ); - io->event_read = event_new( NULL, io->socket, EV_READ, event_read_cb, io ); - io->event_write = event_new( NULL, io->socket, EV_WRITE, event_write_cb, io ); + io->event_read = event_new( session->event_base, io->socket, EV_READ, event_read_cb, io ); + io->event_write = event_new( session->event_base, io->socket, EV_WRITE, event_write_cb, io ); if( io->socket >= 0 ) { diff --git a/libtransmission/peer-mgr.c b/libtransmission/peer-mgr.c index 39246907b..8481a0b71 100644 --- a/libtransmission/peer-mgr.c +++ b/libtransmission/peer-mgr.c @@ -16,7 +16,7 @@ #include /* memcpy, memcmp, strstr */ #include /* qsort */ -#include +#include #include "transmission.h" #include "announcer.h" @@ -503,8 +503,7 @@ deleteTimer( struct event ** t ) { if( *t != NULL ) { - evtimer_del( *t ); - tr_free( *t ); + event_free( *t ); *t = NULL; } } @@ -2042,10 +2041,9 @@ static void rechokePulse ( int, short, void * ); static void reconnectPulse ( int, short, void * ); static struct event * -createTimer( int msec, void (*callback)(int, short, void *), void * cbdata ) +createTimer( tr_session * session, int msec, void (*callback)(int, short, void *), void * cbdata ) { - struct event * timer = tr_new0( struct event, 1 ); - evtimer_set( timer, callback, cbdata ); + struct event * timer = evtimer_new( session->event_base, callback, cbdata ); tr_timerAddMsec( timer, msec ); return timer; } @@ -2054,16 +2052,16 @@ static void ensureMgrTimersExist( struct tr_peerMgr * m ) { if( m->atomTimer == NULL ) - m->atomTimer = createTimer( ATOM_PERIOD_MSEC, atomPulse, m ); + m->atomTimer = createTimer( m->session, ATOM_PERIOD_MSEC, atomPulse, m ); if( m->bandwidthTimer == NULL ) - m->bandwidthTimer = createTimer( BANDWIDTH_PERIOD_MSEC, bandwidthPulse, m ); + m->bandwidthTimer = createTimer( m->session, BANDWIDTH_PERIOD_MSEC, bandwidthPulse, m ); if( m->rechokeTimer == NULL ) - m->rechokeTimer = createTimer( RECHOKE_PERIOD_MSEC, rechokePulse, m ); + m->rechokeTimer = createTimer( m->session, RECHOKE_PERIOD_MSEC, rechokePulse, m ); - if( m->refillUpkeepTimer == NULL ) - m->refillUpkeepTimer = createTimer( REFILL_UPKEEP_PERIOD_MSEC, refillUpkeep, m ); + if( m->refillUpkeepTimer == NULL ) + m->refillUpkeepTimer = createTimer( m->session, REFILL_UPKEEP_PERIOD_MSEC, refillUpkeep, m ); } void diff --git a/libtransmission/peer-msgs.c b/libtransmission/peer-msgs.c index 9614780d7..58c1dbdf9 100644 --- a/libtransmission/peer-msgs.c +++ b/libtransmission/peer-msgs.c @@ -2334,7 +2334,7 @@ tr_peerMsgsNew( struct tr_torrent * torrent, m->outMessagesBatchedAt = 0; m->outMessagesBatchPeriod = LOW_PRIORITY_INTERVAL_SECS; m->incoming.block = evbuffer_new( ); - m->pexTimer = evtimer_new( NULL, pexPulse, m ); + m->pexTimer = evtimer_new( torrent->session->event_base, pexPulse, m ); peer->msgs = m; tr_timerAdd( m->pexTimer, PEX_INTERVAL_SECS, 0 ); diff --git a/libtransmission/port-forwarding.c b/libtransmission/port-forwarding.c index dff5d5f5a..6f0a099f0 100644 --- a/libtransmission/port-forwarding.c +++ b/libtransmission/port-forwarding.c @@ -16,7 +16,7 @@ #include -#include +#include #include "transmission.h" #include "natpmp.h" @@ -172,8 +172,7 @@ stop_timer( tr_shared * s ) { if( s->timer != NULL ) { - evtimer_del( s->timer ); - tr_free( s->timer ); + event_free( s->timer ); s->timer = NULL; } } @@ -209,8 +208,7 @@ tr_sharedClose( tr_session * session ) static void start_timer( tr_shared * s ) { - s->timer = tr_new0( struct event, 1 ); - evtimer_set( s->timer, onTimer, s ); + s->timer = evtimer_new( s->session->event_base, onTimer, s ); set_evtimer_from_status( s ); } diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c index 59e885169..96253fe5a 100644 --- a/libtransmission/rpc-server.c +++ b/libtransmission/rpc-server.c @@ -24,8 +24,10 @@ #include #endif -#include -#include +#include +#include +#include +#include /* TODO: eventually remove this */ #include "transmission.h" #include "bencode.h" @@ -37,6 +39,7 @@ #include "ptrarray.h" #include "rpcimpl.h" #include "rpc-server.h" +#include "session.h" #include "trevent.h" #include "utils.h" #include "web.h" @@ -160,7 +163,7 @@ extract_parts_from_multipart( const struct evkeyvalq * headers, tr_ptrArray * setme_parts ) { const char * content_type = evhttp_find_header( headers, "Content-Type" ); - const char * in = (const char*) EVBUFFER_DATA( body ); + const char * in = (const char*) evbuffer_pullup( body, -1 ); size_t inlen = evbuffer_get_length( body ); const char * boundary_key = "boundary="; @@ -277,7 +280,7 @@ handle_upload( struct evhttp_request * req, struct evbuffer * json = evbuffer_new( ); tr_bencToBuf( &top, TR_FMT_JSON, json ); tr_rpc_request_exec_json( server->session, - EVBUFFER_DATA( json ), + evbuffer_pullup( json, -1 ), evbuffer_get_length( json ), NULL, NULL ); evbuffer_free( json ); @@ -550,7 +553,7 @@ handle_rpc( struct evhttp_request * req, else if( req->type == EVHTTP_REQ_POST ) { tr_rpc_request_exec_json( server->session, - EVBUFFER_DATA( req->input_buffer ), + evbuffer_pullup( req->input_buffer, -1 ), evbuffer_get_length( req->input_buffer ), rpc_response_func, data ); } @@ -686,9 +689,8 @@ startServer( void * vserver ) { addr.type = TR_AF_INET; addr.addr.addr4 = server->bindAddress; - server->httpd = evhttp_new( tr_eventGetBase( server->session ) ); - evhttp_bind_socket( server->httpd, tr_ntop_non_ts( &addr ), - server->port ); + server->httpd = evhttp_new( server->session->event_base ); + evhttp_bind_socket( server->httpd, tr_ntop_non_ts( &addr ), server->port ); evhttp_set_gencb( server->httpd, handle_request, server ); } diff --git a/libtransmission/rpcimpl.c b/libtransmission/rpcimpl.c index fc57dbd6a..b32677275 100644 --- a/libtransmission/rpcimpl.c +++ b/libtransmission/rpcimpl.c @@ -21,7 +21,7 @@ #include #endif -#include /* evbuffer */ +#include #include "transmission.h" #include "bencode.h" diff --git a/libtransmission/session.c b/libtransmission/session.c index 9b8d3553d..06d0a5b92 100644 --- a/libtransmission/session.c +++ b/libtransmission/session.c @@ -21,7 +21,7 @@ #include /* stat */ #include /* opendir */ -#include +#include //#define TR_SHOW_DEPRECATED #include "transmission.h" @@ -143,7 +143,7 @@ struct tr_bindinfo { int socket; tr_address addr; - struct event ev; + struct event * ev; }; @@ -152,7 +152,8 @@ close_bindinfo( struct tr_bindinfo * b ) { if( ( b != NULL ) && ( b->socket >=0 ) ) { - event_del( &b->ev ); + event_free( b->ev ); + b->ev = NULL; tr_netCloseSocket( b->socket ); } } @@ -201,8 +202,8 @@ open_incoming_peer_port( tr_session * session ) b = session->public_ipv4; b->socket = tr_netBindTCP( &b->addr, session->private_peer_port, FALSE ); if( b->socket >= 0 ) { - event_set( &b->ev, b->socket, EV_READ | EV_PERSIST, accept_incoming_peer, session ); - event_add( &b->ev, NULL ); + b->ev = event_new( session->event_base, b->socket, EV_READ | EV_PERSIST, accept_incoming_peer, session ); + event_add( b->ev, NULL ); } /* and do the exact same thing for ipv6, if it's supported... */ @@ -210,8 +211,8 @@ open_incoming_peer_port( tr_session * session ) b = session->public_ipv6; b->socket = tr_netBindTCP( &b->addr, session->private_peer_port, FALSE ); if( b->socket >= 0 ) { - event_set( &b->ev, b->socket, EV_READ | EV_PERSIST, accept_incoming_peer, session ); - event_add( &b->ev, NULL ); + b->ev = event_new( session->event_base, b->socket, EV_READ | EV_PERSIST, accept_incoming_peer, session ); + event_add( b->ev, NULL ); } } } @@ -603,8 +604,8 @@ tr_sessionInitImpl( void * vdata ) tr_sessionGetDefaultSettings( data->configDir, &settings ); tr_bencMergeDicts( &settings, clientSettings ); - session->nowTimer = tr_new0( struct event, 1 ); - evtimer_set( session->nowTimer, onNowTimer, session ); + assert( session->event_base != NULL ); + session->nowTimer = evtimer_new( session->event_base, onNowTimer, session ); onNowTimer( 0, 0, session ); #ifndef WIN32 @@ -633,8 +634,7 @@ tr_sessionInitImpl( void * vdata ) assert( tr_isSession( session ) ); - session->saveTimer = tr_new0( struct event, 1 ); - evtimer_set( session->saveTimer, onSaveTimer, session ); + session->saveTimer = evtimer_new( session->event_base, onSaveTimer, session ); tr_timerAdd( session->saveTimer, SAVE_INTERVAL_SECS, 0 ); tr_announcerInit( session ); @@ -1666,12 +1666,10 @@ sessionCloseImpl( void * vsession ) if( session->isDHTEnabled ) tr_dhtUninit( session ); - evtimer_del( session->saveTimer ); - tr_free( session->saveTimer ); + event_free( session->saveTimer ); session->saveTimer = NULL; - evtimer_del( session->nowTimer ); - tr_free( session->nowTimer ); + event_free( session->nowTimer ); session->nowTimer = NULL; tr_verifyClose( session ); @@ -1755,7 +1753,7 @@ tr_sessionClose( tr_session * session ) { dbgmsg( "calling event_loopbreak()" ); forced = TRUE; - event_loopbreak( ); + event_base_loopbreak( session->event_base ); } if( deadlineReached( deadline+3 ) ) { diff --git a/libtransmission/session.h b/libtransmission/session.h index 25fb0c5d1..03329eb63 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -37,6 +37,7 @@ uint8_t* tr_peerIdNew( void ); const uint8_t* tr_getPeerId( void ); +struct event_base; struct tr_address; struct tr_announcer; struct tr_bandwidth; @@ -117,7 +118,8 @@ struct tr_session tr_preallocation_mode preallocationMode; - struct tr_event_handle * events; + struct event_base * event_base; + struct tr_event_handle * events; uint16_t peerLimitPerTorrent; diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index 02dc990cc..6a9105656 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -23,8 +23,7 @@ #include /* memcmp */ #include /* qsort */ -#include /* some 1.4.x versions of evutil.h need this */ -#include /* evutil_vsnprintf() */ +#include /* evutil_vsnprintf() */ #include "transmission.h" #include "announcer.h" diff --git a/libtransmission/tr-dht.c b/libtransmission/tr-dht.c index 71fb91da2..e220a145c 100644 --- a/libtransmission/tr-dht.c +++ b/libtransmission/tr-dht.c @@ -400,12 +400,12 @@ tr_dhtInit(tr_session *ss, const tr_address * tr_addr) cl->len6 = len6; tr_threadNew( dht_bootstrap, cl ); - dht_event = event_new( NULL, dht_socket, EV_READ, event_callback, NULL ); + dht_event = event_new( session->event_base, dht_socket, EV_READ, event_callback, NULL ); tr_timerAdd( dht_event, 0, tr_cryptoWeakRandInt( 1000000 ) ); if( dht6_socket >= 0 ) { - dht6_event = event_new( NULL, dht6_socket, EV_READ, event_callback, NULL ); + dht6_event = event_new( session->event_base, dht6_socket, EV_READ, event_callback, NULL ); tr_timerAdd( dht6_event, 0, tr_cryptoWeakRandInt( 1000000 ) ); } diff --git a/libtransmission/tr-lpd.c b/libtransmission/tr-lpd.c index 244b92074..c6306eb48 100644 --- a/libtransmission/tr-lpd.c +++ b/libtransmission/tr-lpd.c @@ -338,7 +338,7 @@ int tr_lpdInit( tr_session* ss, tr_address* tr_addr UNUSED ) /* Note: lpd_unsolicitedMsgCounter remains 0 until the first timeout event, thus * any announcement received during the initial interval will be discarded. */ - lpd_event = event_new( NULL, lpd_socket, EV_READ | EV_PERSIST, event_callback, NULL ); + lpd_event = event_new( ss->event_base, lpd_socket, EV_READ | EV_PERSIST, event_callback, NULL ); event_add( lpd_event, NULL ); tr_ndbg( "LPD", "Local Peer Discovery initialised" ); diff --git a/libtransmission/trevent.c b/libtransmission/trevent.c index 465ad14fd..ef58021a5 100644 --- a/libtransmission/trevent.c +++ b/libtransmission/trevent.c @@ -18,7 +18,7 @@ #include -#include +#include #include "transmission.h" #include "net.h" @@ -143,7 +143,7 @@ typedef struct tr_event_handle tr_session * session; tr_thread * thread; struct event_base * base; - struct event pipeEvent; + struct event * pipeEvent; } tr_event_handle; @@ -198,7 +198,7 @@ readFromPipe( int fd, case '\0': /* eof */ { dbgmsg( "pipe eof reached... removing event listener" ); - event_del( &eh->pipeEvent ); + event_free( eh->pipeEvent ); break; } @@ -222,6 +222,7 @@ logFunc( int severity, const char * message ) static void libeventThreadFunc( void * veh ) { + struct event_base * base; tr_event_handle * eh = veh; #ifndef WIN32 @@ -229,21 +230,23 @@ libeventThreadFunc( void * veh ) signal( SIGPIPE, SIG_IGN ); #endif - eh->base = event_init( ); + base = event_base_new( ); + eh->base = base; + eh->session->event_base = base; 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_add( &eh->pipeEvent, NULL ); + eh->pipeEvent = event_new( base, 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 */ while( !eh->die ) - event_dispatch( ); + event_base_dispatch( base ); /* shut down the thread */ tr_lockFree( eh->lock ); - event_base_free( eh->base ); + event_base_free( base ); eh->session->events = NULL; tr_free( eh ); tr_dbg( "Closing libevent thread" ); @@ -320,11 +323,3 @@ tr_runInEventThread( tr_session * session, tr_lockUnlock( lock ); } } - -struct event_base * -tr_eventGetBase( tr_session * session ) -{ - assert( tr_isSession( session ) ); - - return session->events->base; -} diff --git a/libtransmission/trevent.h b/libtransmission/trevent.h index cae532822..9899378bc 100644 --- a/libtransmission/trevent.h +++ b/libtransmission/trevent.h @@ -31,6 +31,4 @@ tr_bool tr_amInEventThread( const tr_session * ); void tr_runInEventThread( tr_session *, void func( void* ), void * user_data ); -struct event_base * tr_eventGetBase( tr_session * ); - #endif