From da33403683d8c64e0aff4b8961809bca457b3d21 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 19 Sep 2014 17:43:38 -0700 Subject: [PATCH] try to poll for blocks on separate thread. --- src/bitcoindjs.cc | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index 46e45dfe..de09444a 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -177,10 +177,14 @@ async_get_block(uv_work_t *req); static void async_get_block_after(uv_work_t *req); +static void +poll_blocks(void); + extern "C" void init(Handle); static volatile bool shutdownComplete = false; +static volatile CBlockIndex *lastindex = NULL; // bool (*AcceptBlock_original)(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) = &AcceptBlock; // bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) { @@ -188,11 +192,11 @@ static volatile bool shutdownComplete = false; // return AcceptBlock_original(block, state, dbp); // } -bool __real_AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp); -bool __wrap_AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) { - printf("AcceptBlock called\n"); - return __real_AcceptBlock(block, state, dbp); -} +// bool __real_AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp); +// bool __wrap_AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) { +// printf("AcceptBlock called\n"); +// return __real_AcceptBlock(block, state, dbp); +// } /** * async_block_data @@ -385,6 +389,8 @@ start_node(void) { (boost::thread *)new boost::thread(boost::bind(&start_node_thread)); + // (boost::thread *)new boost::thread(boost::bind(&poll_blocks)); + // horrible fix for a race condition sleep(2); signal(SIGINT, SIG_DFL); @@ -882,6 +888,28 @@ async_get_block_after(uv_work_t *req) { delete req; } +static void +poll_blocks(void) { + if (!lastindex) { + lastindex = chainActive.Tip(); + } + CBlockIndex *pnext = chainActive.Next((const CBlockIndex *)lastindex); + CBlockIndex *pcur = pnext; + if (pnext) { + // execute callback + printf("Found block\n"); + while ((pcur = chainActive.Next(pcur))) { + // execute callback + printf("Found block\n"); + pnext = pcur; + } + } + if (pnext) { + lastindex = pnext; + } + sleep(1); +} + /** * Init */