]> granicus.if.org Git - transmission/commitdiff
(trunk libT) #3836 "libevent2 support" -- finish moving to the libevent2 API mode...
authorCharles Kerr <charles@transmissionbt.com>
Fri, 24 Dec 2010 08:58:41 +0000 (08:58 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Fri, 24 Dec 2010 08:58:41 +0000 (08:58 +0000)
17 files changed:
libtransmission/JSON_parser.c
libtransmission/announcer.c
libtransmission/handshake.c
libtransmission/net.c
libtransmission/peer-io.c
libtransmission/peer-mgr.c
libtransmission/peer-msgs.c
libtransmission/port-forwarding.c
libtransmission/rpc-server.c
libtransmission/rpcimpl.c
libtransmission/session.c
libtransmission/session.h
libtransmission/torrent.c
libtransmission/tr-dht.c
libtransmission/tr-lpd.c
libtransmission/trevent.c
libtransmission/trevent.h

index 1c009169a25883427e60487c6ecfa86c4ce305b2..b86e310bccbb9dfe7f264b2328af14c7395b9305 100644 (file)
@@ -69,7 +69,7 @@ SOFTWARE.
 #include <locale.h>
 
 #include <stdarg.h> /* some 1.4.x versions of evutil.h need this */
-#include <evutil.h> /* evutil_strtoll() */
+#include <event2/util.h> /* evutil_strtoll() */
 
 #include "JSON_parser.h"
 
index 08648c7281d2eb2d1b60ee86575ae91bf8a86f32..53f03399b4ab5ed408bffa8057e3d7e43bb2a8ad 100644 (file)
@@ -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;
index aab2531dda1ae3bca530bbe6925e24414b566153..772616346155052d93834421cffd6b4e591f8fee 100644 (file)
@@ -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 */
index a7bc6a798ae48cad9b8a15192a1745c6a89deb63..25cb7ce9585ba7534bd1bb581bb504ecce890b5d 100644 (file)
@@ -44,8 +44,7 @@
 #endif
 #include <unistd.h>
 
-#include <stdarg.h> /* some 1.4.x versions of evutil.h need this */
-#include <evutil.h>
+#include <event2/util.h>
 
 #include "transmission.h"
 #include "fdlimit.h"
index 05a6a0bdb14235c17f6222e1d87ca4303a4faf6a..133ed637c4413a68e77b110c68dad797e25ae7b6 100644 (file)
@@ -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 )
     {
index 39246907b87932867511ab49c3cd94654ecbe8de..8481a0b711fc0ed0f8d62c31a1fe00371114eb53 100644 (file)
@@ -16,7 +16,7 @@
 #include <string.h> /* memcpy, memcmp, strstr */
 #include <stdlib.h> /* qsort */
 
-#include <event.h>
+#include <event2/event.h>
 
 #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
index 9614780d73c40c0c8a7e3e9ba17fbbaba29f62bd..58c1dbdf9b7ad032afb1a41927331ea5bd0ea489 100644 (file)
@@ -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 );
 
index dff5d5f5a8db2f1f62bd9ad3cba833525a30118f..6f0a099f09684e832f18f8e5a2c767dd929c76bb 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <sys/types.h>
 
-#include <event.h>
+#include <event2/event.h>
 
 #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 );
 }
 
index 59e88516930c449dd32a9a9da793c25c1ed224b2..96253fe5ac4a12da25ff1964f6456bc56068af92 100644 (file)
  #include <zlib.h>
 #endif
 
-#include <event.h>
-#include <evhttp.h>
+#include <event2/buffer.h>
+#include <event2/event.h>
+#include <event2/http.h>
+#include <event2/http_struct.h> /* 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 );
 
     }
index fc57dbd6a4db6510f084ad3046fb5a056486d76d..b32677275a5a8587f5213e597076cf9cdeafd51c 100644 (file)
@@ -21,7 +21,7 @@
  #include <zlib.h>
 #endif
 
-#include <event.h> /* evbuffer */
+#include <event2/buffer.h>
 
 #include "transmission.h"
 #include "bencode.h"
index 9b8d3553d6a2bfefe949997285dc6782cd38e464..06d0a5b92b14c7ed4c66d6290e698c2c2993df95 100644 (file)
@@ -21,7 +21,7 @@
 #include <unistd.h> /* stat */
 #include <dirent.h> /* opendir */
 
-#include <event.h>
+#include <event2/event.h>
 
 //#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 ) )
         {
index 25fb0c5d186978143cfab119aa58d85eb344e7b2..03329eb631f8f9baeccf1facfe5d7e135fc302f0 100644 (file)
@@ -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;
 
index 02dc990cce512b50e87e040963357c31474dec96..6a9105656ccfd2d1fb9f3d5aafeb2c3de13e25bb 100644 (file)
@@ -23,8 +23,7 @@
 #include <string.h> /* memcmp */
 #include <stdlib.h> /* qsort */
 
-#include <stdarg.h> /* some 1.4.x versions of evutil.h need this */
-#include <evutil.h> /* evutil_vsnprintf() */
+#include <event2/util.h> /* evutil_vsnprintf() */
 
 #include "transmission.h"
 #include "announcer.h"
index 71fb91da29583783787b62dfada413768cc2e953..e220a145cb33f0ec30b2d86f86604d397341e375 100644 (file)
@@ -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 ) );
     }
 
index 244b920745cd03b103f232ee11dd10207ebc6fde..c6306eb48e058a4d2ab7b3107841bdac1b03a8e7 100644 (file)
@@ -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" );
index 465ad14fdf4cafad0f7f25d0d0b2587f35eb5336..ef58021a59b51d7ac89eb0960cac1f3c546712d4 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <signal.h>
 
-#include <event.h>
+#include <event2/event.h>
 
 #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;
-}
index cae5328226cd9797c84f72c3b2a4fe6f7797a8b8..9899378bc7dc3d782509e614b4dc3f19fad69a17 100644 (file)
@@ -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