From 54d278643d99b1db8b7a944d5e0dbb98330421cf Mon Sep 17 00:00:00 2001 From: SChernykh <15806605+SChernykh@users.noreply.github.com> Date: Thu, 5 Jun 2025 23:22:11 +0200 Subject: [PATCH] CI: sync test - added merge mining --- .github/workflows/test-sync.yml | 14 ++++++------ src/main.cpp | 24 ++++++++++++++++++++ src/memory_leak_debug.cpp | 40 +++++++++++++++++++++++++++------ src/p2pool.cpp | 2 +- 4 files changed, 65 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test-sync.yml b/.github/workflows/test-sync.yml index 9ed1e0d..92d5d57 100644 --- a/.github/workflows/test-sync.yml +++ b/.github/workflows/test-sync.yml @@ -69,7 +69,7 @@ jobs: python ../tests/src/stratum_dummy.py 2 & python ../tests/src/stratum_dummy.py 3 & sudo sysctl vm.mmap_rnd_bits=28 - TSAN_OPTIONS="suppressions=../tests/src/tsan_sup.txt halt_on_error=1 history_size=4" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + TSAN_OPTIONS="suppressions=../tests/src/tsan_sup.txt halt_on_error=1 history_size=4" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -155,7 +155,7 @@ jobs: python ../tests/src/stratum_dummy.py 2 & python ../tests/src/stratum_dummy.py 3 & sudo sysctl vm.mmap_rnd_bits=28 - MSAN_OPTIONS="halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + MSAN_OPTIONS="halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -202,7 +202,7 @@ jobs: python ../tests/src/stratum_dummy.py 2 & python ../tests/src/stratum_dummy.py 3 & sudo sysctl vm.mmap_rnd_bits=28 - UBSAN_OPTIONS="suppressions=../tests/src/ubsan_sup.txt halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + UBSAN_OPTIONS="suppressions=../tests/src/ubsan_sup.txt halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -249,7 +249,7 @@ jobs: python ../tests/src/stratum_dummy.py 2 & python ../tests/src/stratum_dummy.py 3 & sudo sysctl vm.mmap_rnd_bits=28 - ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -318,7 +318,7 @@ jobs: python3 ../tests/src/stratum_dummy.py 1 & python3 ../tests/src/stratum_dummy.py 2 & python3 ../tests/src/stratum_dummy.py 3 & - ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -363,7 +363,7 @@ jobs: start python ../../tests/src/stratum_dummy.py 1 start python ../../tests/src/stratum_dummy.py 2 start python ../../tests/src/stratum_dummy.py 3 - p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | @@ -406,7 +406,7 @@ jobs: Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 1" Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 2" Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 3" - ./p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6 + ./p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6 - name: Check p2pool.log run: | diff --git a/src/main.cpp b/src/main.cpp index e5dd2f9..f281df7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,6 +21,22 @@ #include "stratum_server.h" #include "p2p_server.h" #include + +#ifdef WITH_GRPC + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4574) +#endif + +#include + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // WITH_GRPC + #include #ifdef WITH_RANDOMX @@ -251,6 +267,10 @@ int main(int argc, char* argv[]) return result; } +#ifdef WITH_GRPC + grpc_init(); +#endif + try { p2pool::p2pool pool(argc, argv); result = pool.run(); @@ -259,6 +279,10 @@ int main(int argc, char* argv[]) result = 1; } +#ifdef WITH_GRPC + grpc_shutdown(); +#endif + curl_global_cleanup(); p2pool::destroy_crypto_cache(); diff --git a/src/memory_leak_debug.cpp b/src/memory_leak_debug.cpp index c96cecf..e9d898d 100644 --- a/src/memory_leak_debug.cpp +++ b/src/memory_leak_debug.cpp @@ -48,8 +48,10 @@ struct TrackedAllocation FORCEINLINE bool operator<(const TrackedAllocation& rhs) { return memcmp(stack_trace, rhs.stack_trace, sizeof(stack_trace)) < 0; } FORCEINLINE bool operator==(const TrackedAllocation& rhs) { return memcmp(stack_trace, rhs.stack_trace, sizeof(stack_trace)) == 0; } - void print(HANDLE h) const + void print(HANDLE h, bool& is_grpc) const { + is_grpc = false; + char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)] = {}; PSYMBOL_INFO pSymbol = reinterpret_cast(buffer); @@ -66,13 +68,21 @@ struct TrackedAllocation if (SymFromAddr(h, address, &t1, pSymbol) && SymGetLineFromAddr64(h, address, &t2, &line)) { const char* s = line.FileName; const char* file_name = nullptr; + while (*s) { if ((*s == '\\') || (*s == '/')) { file_name = s + 1; } ++s; } - printf("%-25s %s (line %lu)\n", file_name ? file_name : line.FileName, pSymbol->Name, line.LineNumber); + + s = pSymbol->Name; + + printf("%-25s %s (line %lu)\n", file_name ? file_name : line.FileName, s, line.LineNumber); + + if (!is_grpc && ((strstr(s, "grpc::") == s) || (strstr(s, "grpc_core::") == s) || (strstr(s, "grpc_init") == s))) { + is_grpc = true; + } } } printf("\n"); @@ -130,7 +140,8 @@ void show_top_10_allocations() for (TrackedAllocation* p = buf; (p < buf + 10) && (p < end); ++p) { printf("%I64u bytes allocated at:\n", p->allocated_size); - p->print(h); + bool is_grpc; + p->print(h, is_grpc); } } @@ -314,21 +325,36 @@ bool memory_tracking_stop() const HANDLE h = GetCurrentProcess(); uint64_t total_leaks = 0; + uint64_t grpc_leaks = 0; for (uint32_t i = 0; i < N; ++i) { const TrackedAllocation& t = allocations[i]; if (t.allocated_size) { - total_leaks += t.allocated_size; - printf("Memory leak detected, %I64u bytes allocated at %p by thread %u:\n", t.allocated_size, t.p, t.thread_id); - t.print(h); + + bool is_grpc; + t.print(h, is_grpc); + + if (is_grpc) { + printf("^^^ grpc leak ^^^\n\n"); + grpc_leaks += t.allocated_size; + } + else { + printf("^^^ non-grpc leak ^^^\n\n"); + total_leaks += t.allocated_size; + } } } if (total_leaks > 0) { printf("%I64u bytes leaked\n\n", total_leaks); } - else { + + if (grpc_leaks > 0) { + printf("%I64u bytes leaked by gRPC\n\n", grpc_leaks); + } + + if ((total_leaks == 0) && (grpc_leaks == 0)) { printf("No memory leaks detected\n\n"); } diff --git a/src/p2pool.cpp b/src/p2pool.cpp index 4e8972d..2be38e2 100644 --- a/src/p2pool.cpp +++ b/src/p2pool.cpp @@ -669,7 +669,7 @@ void p2pool::update_aux_data(const hash& chain_id) aux_id.emplace_back(c.aux_id); } } - else { + else if (mm_donation_params_last_updated) { LOGINFO(5, "update_aux_data: merge mining donation data is stale, not using it"); } #endif