mirror of
https://github.com/transmission/transmission
synced 2025-03-05 02:58:33 +00:00
(libT RPC server): poll more frequently for new commands after we've received the first one.
This commit is contained in:
parent
b92e88b29c
commit
32f71e1725
2 changed files with 15 additions and 4 deletions
libtransmission
|
@ -27,11 +27,13 @@
|
||||||
#define MY_NAME "RPC Server"
|
#define MY_NAME "RPC Server"
|
||||||
|
|
||||||
#define BUSY_INTERVAL_MSEC 30
|
#define BUSY_INTERVAL_MSEC 30
|
||||||
#define IDLE_INTERVAL_MSEC 1000
|
#define IDLE_INTERVAL_MSEC 100
|
||||||
|
#define UNUSED_INTERVAL_MSEC 1000
|
||||||
|
|
||||||
struct tr_rpc_server
|
struct tr_rpc_server
|
||||||
{
|
{
|
||||||
int port;
|
int port;
|
||||||
|
time_t lastRequestTime;
|
||||||
struct shttpd_ctx * ctx;
|
struct shttpd_ctx * ctx;
|
||||||
tr_handle * session;
|
tr_handle * session;
|
||||||
struct evbuffer * in;
|
struct evbuffer * in;
|
||||||
|
@ -96,16 +98,21 @@ rpcPulse( int socket UNUSED, short action UNUSED, void * vserver )
|
||||||
int interval;
|
int interval;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
tr_rpc_server * server = vserver;
|
tr_rpc_server * server = vserver;
|
||||||
|
const time_t now = time( NULL );
|
||||||
|
|
||||||
assert( server );
|
assert( server );
|
||||||
|
|
||||||
shttpd_poll( server->ctx, 1 );
|
shttpd_poll( server->ctx, 1 );
|
||||||
|
|
||||||
/* set a timer for the next pulse */
|
/* 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;
|
interval = BUSY_INTERVAL_MSEC;
|
||||||
else
|
server->lastRequestTime = now;
|
||||||
|
} else if( now - server->lastRequestTime < 300 ) {
|
||||||
interval = IDLE_INTERVAL_MSEC;
|
interval = IDLE_INTERVAL_MSEC;
|
||||||
|
} else {
|
||||||
|
interval = UNUSED_INTERVAL_MSEC;
|
||||||
|
}
|
||||||
tv = tr_timevalMsec( interval );
|
tv = tr_timevalMsec( interval );
|
||||||
evtimer_add( &server->timer, &tv );
|
evtimer_add( &server->timer, &tv );
|
||||||
}
|
}
|
||||||
|
@ -116,7 +123,7 @@ startServer( tr_rpc_server * server )
|
||||||
if( !server->ctx )
|
if( !server->ctx )
|
||||||
{
|
{
|
||||||
char ports[128];
|
char ports[128];
|
||||||
struct timeval tv = tr_timevalMsec( IDLE_INTERVAL_MSEC );
|
struct timeval tv = tr_timevalMsec( UNUSED_INTERVAL_MSEC );
|
||||||
|
|
||||||
server->ctx = shttpd_init( );
|
server->ctx = shttpd_init( );
|
||||||
snprintf( ports, sizeof( ports ), "%d", server->port );
|
snprintf( ports, sizeof( ports ), "%d", server->port );
|
||||||
|
|
|
@ -36,6 +36,10 @@ int tr_rpcSetTest ( const tr_rpc_server * server,
|
||||||
const char * acl,
|
const char * acl,
|
||||||
char ** allocme_errmsg );
|
char ** allocme_errmsg );
|
||||||
|
|
||||||
|
int tr_rpcTestACL ( const tr_rpc_server * server,
|
||||||
|
const char * acl,
|
||||||
|
char ** allocme_errmsg );
|
||||||
|
|
||||||
int tr_rpcSetACL ( tr_rpc_server * server,
|
int tr_rpcSetACL ( tr_rpc_server * server,
|
||||||
const char * acl,
|
const char * acl,
|
||||||
char ** allocme_errmsg );
|
char ** allocme_errmsg );
|
||||||
|
|
Loading…
Add table
Reference in a new issue