From 32f71e1725e593a2a24fd7b86b11b68f97250f06 Mon Sep 17 00:00:00 2001
From: Charles Kerr <charles@transmissionbt.com>
Date: Thu, 5 Jun 2008 02:07:17 +0000
Subject: [PATCH] (libT RPC server): poll more frequently for new commands
 after we've received the first one.

---
 libtransmission/rpc-server.c | 15 +++++++++++----
 libtransmission/rpc-server.h |  4 ++++
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c
index 35be5db14..7e69420ae 100644
--- a/libtransmission/rpc-server.c
+++ b/libtransmission/rpc-server.c
@@ -27,11 +27,13 @@
 #define MY_NAME "RPC Server"
 
 #define BUSY_INTERVAL_MSEC 30
-#define IDLE_INTERVAL_MSEC 1000
+#define IDLE_INTERVAL_MSEC 100
+#define UNUSED_INTERVAL_MSEC 1000
 
 struct tr_rpc_server
 {
     int port;
+    time_t lastRequestTime;
     struct shttpd_ctx * ctx;
     tr_handle * session;
     struct evbuffer * in;
@@ -96,16 +98,21 @@ rpcPulse( int socket UNUSED, short action UNUSED, void * vserver )
     int interval;
     struct timeval tv;
     tr_rpc_server * server = vserver;
+    const time_t now = time( NULL );
 
     assert( server );
 
     shttpd_poll( server->ctx, 1 );
 
     /* set a timer for the next pulse */
-    if( EVBUFFER_LENGTH( server->in ) || EVBUFFER_LENGTH( server->out ) )
+    if( EVBUFFER_LENGTH( server->in ) || EVBUFFER_LENGTH( server->out ) ) {
         interval = BUSY_INTERVAL_MSEC;
-    else
+        server->lastRequestTime = now;
+    } else if( now - server->lastRequestTime < 300 ) {
         interval = IDLE_INTERVAL_MSEC;
+    } else {
+        interval = UNUSED_INTERVAL_MSEC;
+    }
     tv = tr_timevalMsec( interval );
     evtimer_add( &server->timer, &tv );
 }
@@ -116,7 +123,7 @@ startServer( tr_rpc_server * server )
     if( !server->ctx )
     {
         char ports[128];
-        struct timeval tv = tr_timevalMsec( IDLE_INTERVAL_MSEC );
+        struct timeval tv = tr_timevalMsec( UNUSED_INTERVAL_MSEC );
 
         server->ctx = shttpd_init( );
         snprintf( ports, sizeof( ports ), "%d", server->port );
diff --git a/libtransmission/rpc-server.h b/libtransmission/rpc-server.h
index f86d53382..12a16ec9d 100644
--- a/libtransmission/rpc-server.h
+++ b/libtransmission/rpc-server.h
@@ -36,6 +36,10 @@ int         tr_rpcSetTest   ( const tr_rpc_server    * server,
                               const char             * acl,
                               char                  ** allocme_errmsg );
 
+int         tr_rpcTestACL   ( const tr_rpc_server    * server,
+                              const char             * acl,
+                              char                  ** allocme_errmsg );
+
 int         tr_rpcSetACL    ( tr_rpc_server          * server,
                               const char             * acl,
                               char                  ** allocme_errmsg );