@@ -1635,6 +1635,42 @@ void P2PServer::clean_monero_block_broadcasts()
1635
1635
}
1636
1636
}
1637
1637
1638
+ void P2PServer::submit_monero_blocks ()
1639
+ {
1640
+ if (m_MoneroBlocksToSubmit.empty ()) {
1641
+ return ;
1642
+ }
1643
+
1644
+ LOGINFO (6 , " submit_monero_blocks: started, queue size = " << m_MoneroBlocksToSubmit.size ());
1645
+
1646
+ const Params::Host& host = m_pool->current_host ();
1647
+
1648
+ JSONRPCRequest::call (
1649
+ host.m_address ,
1650
+ host.m_rpcPort ,
1651
+ m_MoneroBlocksToSubmit.front (),
1652
+ host.m_rpcLogin ,
1653
+ m_socks5Proxy,
1654
+ host.m_rpcSSL ,
1655
+ host.m_rpcSSL_Fingerprint ,
1656
+ JSONRPCRequest::dummy_callback,
1657
+ [this ](const char * data, size_t size, double )
1658
+ {
1659
+ if (size > 0 ) {
1660
+ LOGERR (3 , " on_monero_block_broadcast: submit_block RPC request failed, error " << log::const_buf (data, size));
1661
+ }
1662
+
1663
+ if (!m_MoneroBlocksToSubmit.empty ()) {
1664
+ m_MoneroBlocksToSubmit.pop_front ();
1665
+ }
1666
+ LOGINFO (6 , " submit_monero_blocks: finished, queue size = " << m_MoneroBlocksToSubmit.size ());
1667
+
1668
+ submit_monero_blocks ();
1669
+ },
1670
+ &m_loop
1671
+ );
1672
+ }
1673
+
1638
1674
void P2PServer::broadcast_monero_block_async (std::vector<std::vector<uint8_t >>&& blobs)
1639
1675
{
1640
1676
MutexLock lock (m_MoneroBlocksToBroadcastLock);
@@ -3099,25 +3135,13 @@ bool P2PServer::P2PClient::on_monero_block_broadcast(const uint8_t* buf, uint32_
3099
3135
3100
3136
request.append (" \" ]}" );
3101
3137
3102
- const Params::Host& host = pool-> current_host ( );
3138
+ server-> m_MoneroBlocksToSubmit . emplace_back ( std::move (request) );
3103
3139
3104
- JSONRPCRequest::call (
3105
- host.m_address ,
3106
- host.m_rpcPort ,
3107
- request,
3108
- host.m_rpcLogin ,
3109
- server->m_socks5Proxy ,
3110
- host.m_rpcSSL ,
3111
- host.m_rpcSSL_Fingerprint ,
3112
- JSONRPCRequest::dummy_callback,
3113
- [](const char * data, size_t size, double )
3114
- {
3115
- if (size > 0 ) {
3116
- LOGERR (3 , " on_monero_block_broadcast: submit_block RPC request failed, error " << log::const_buf (data, size));
3117
- }
3118
- },
3119
- &server->m_loop
3120
- );
3140
+ // Kick the JSON RPC request loop only when the first request arrives
3141
+ // The other requests will be queued and submit_monero_blocks() will process them one by one
3142
+ if (server->m_MoneroBlocksToSubmit .size () == 1 ) {
3143
+ server->submit_monero_blocks ();
3144
+ }
3121
3145
3122
3146
return true ;
3123
3147
}
0 commit comments