@ -33,7 +33,7 @@ static bool fRPCInWarmup = true;
static std : : string rpcWarmupStatus ( " RPC server started " ) ;
static std : : string rpcWarmupStatus ( " RPC server started " ) ;
static CCriticalSection cs_rpcWarmup ;
static CCriticalSection cs_rpcWarmup ;
/* Timer-creating functions */
/* Timer-creating functions */
static std : : vector < RPCTimerInterface * > timerInterfaces ;
static RPCTimerInterface * timerInterface = NULL ;
/* Map of name to timer.
/* Map of name to timer.
* @ note Can be changed to std : : unique_ptr when C + + 11 */
* @ note Can be changed to std : : unique_ptr when C + + 11 */
static std : : map < std : : string , boost : : shared_ptr < RPCTimerBase > > deadlineTimers ;
static std : : map < std : : string , boost : : shared_ptr < RPCTimerBase > > deadlineTimers ;
@ -546,24 +546,28 @@ std::string HelpExampleRpc(const std::string& methodname, const std::string& arg
" \" method \" : \" " + methodname + " \" , \" params \" : [ " + args + " ] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ \n " ;
" \" method \" : \" " + methodname + " \" , \" params \" : [ " + args + " ] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ \n " ;
}
}
void RPCRegisterTimerInterface ( RPCTimerInterface * iface )
void RPCSetTimerInterfaceIfUnset ( RPCTimerInterface * iface )
{
{
timerInterfaces . push_back ( iface ) ;
if ( ! timerInterface )
timerInterface = iface ;
}
}
void RPCUnregister TimerInterface ( RPCTimerInterface * iface )
void RPCSet TimerInterface ( RPCTimerInterface * iface )
{
{
std : : vector < RPCTimerInterface * > : : iterator i = std : : find ( timerInterfaces . begin ( ) , timerInterfaces . end ( ) , iface ) ;
timerInterface = iface ;
assert ( i ! = timerInterfaces . end ( ) ) ;
}
timerInterfaces . erase ( i ) ;
void RPCUnsetTimerInterface ( RPCTimerInterface * iface )
{
if ( timerInterface = = iface )
timerInterface = NULL ;
}
}
void RPCRunLater ( const std : : string & name , boost : : function < void ( void ) > func , int64_t nSeconds )
void RPCRunLater ( const std : : string & name , boost : : function < void ( void ) > func , int64_t nSeconds )
{
{
if ( timerInterfaces . empty ( ) )
if ( ! timerInterface )
throw JSONRPCError ( RPC_INTERNAL_ERROR , " No timer handler registered for RPC " ) ;
throw JSONRPCError ( RPC_INTERNAL_ERROR , " No timer handler registered for RPC " ) ;
deadlineTimers . erase ( name ) ;
deadlineTimers . erase ( name ) ;
RPCTimerInterface * timerInterface = timerInterfaces [ 0 ] ;
LogPrint ( " rpc " , " queue run of timer %s in %i seconds (using %s) \n " , name , nSeconds , timerInterface - > Name ( ) ) ;
LogPrint ( " rpc " , " queue run of timer %s in %i seconds (using %s) \n " , name , nSeconds , timerInterface - > Name ( ) ) ;
deadlineTimers . insert ( std : : make_pair ( name , boost : : shared_ptr < RPCTimerBase > ( timerInterface - > NewTimer ( func , nSeconds * 1000 ) ) ) ) ;
deadlineTimers . insert ( std : : make_pair ( name , boost : : shared_ptr < RPCTimerBase > ( timerInterface - > NewTimer ( func , nSeconds * 1000 ) ) ) ) ;
}
}