Skip to content

Commit

Permalink
change tracethread parameter from char* to std::string to fix CI exce…
Browse files Browse the repository at this point in the history
…ption
  • Loading branch information
Naviabheeman committed Jun 23, 2023
1 parent 9674f19 commit 21209f2
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 42 deletions.
2 changes: 1 addition & 1 deletion src/index/base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ void BaseIndex::Start()
return;
}

m_thread_sync = std::thread(&TraceThread<std::function<void()>>, GetName(),
m_thread_sync = std::thread(&TraceThread, GetName(),
std::bind(&BaseIndex::ThreadSync, this));
}

Expand Down
2 changes: 1 addition & 1 deletion src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1234,7 +1234,7 @@ bool AppInitMain()

// Start the lightweight task scheduler thread
CScheduler::Function serviceLoop = std::bind(&CScheduler::serviceQueue, &scheduler);
scheduler.m_service_thread = std::thread(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop);
scheduler.m_service_thread = std::thread(&TraceThread, "scheduler", serviceLoop);

// Gather some entropy once per minute.
scheduler.scheduleEvery([]{
Expand Down
12 changes: 6 additions & 6 deletions src/net.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1564,7 +1564,7 @@ void StartMapPort()
{
if (!g_upnp_thread.joinable()) {
assert(!g_upnp_interrupt);
g_upnp_thread = std::thread((std::bind(&TraceThread<void (*)()>, "upnp", &ThreadMapPort)));
g_upnp_thread = std::thread((std::bind(&TraceThread, "upnp", &ThreadMapPort)));
}
}

Expand Down Expand Up @@ -2354,15 +2354,15 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions)
}

// Send and receive from sockets, accept connections
threadSocketHandler = std::thread(&TraceThread<std::function<void()> >, "net", std::function<void()>(std::bind(&CConnman::ThreadSocketHandler, this)));
threadSocketHandler = std::thread(&TraceThread, "net", std::bind(&CConnman::ThreadSocketHandler, this));

if (!gArgs.GetBoolArg("-dnsseed", true))
LogPrintf("DNS seeding disabled\n");
else
threadDNSAddressSeed = std::thread(&TraceThread<std::function<void()> >, "dnsseed", std::function<void()>(std::bind(&CConnman::ThreadDNSAddressSeed, this)));
threadDNSAddressSeed = std::thread(&TraceThread, "dnsseed", std::bind(&CConnman::ThreadDNSAddressSeed, this));

// Initiate outbound connections from -addnode
threadOpenAddedConnections = std::thread(&TraceThread<std::function<void()> >, "addcon", std::function<void()>(std::bind(&CConnman::ThreadOpenAddedConnections, this)));
threadOpenAddedConnections = std::thread(&TraceThread, "addcon", std::bind(&CConnman::ThreadOpenAddedConnections, this));

if (connOptions.m_use_addrman_outgoing && !connOptions.m_specified_outgoing.empty()) {
if (clientInterface) {
Expand All @@ -2373,10 +2373,10 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions)
return false;
}
if (connOptions.m_use_addrman_outgoing || !connOptions.m_specified_outgoing.empty())
threadOpenConnections = std::thread(&TraceThread<std::function<void()> >, "opencon", std::function<void()>(std::bind(&CConnman::ThreadOpenConnections, this, connOptions.m_specified_outgoing)));
threadOpenConnections = std::thread(&TraceThread, "opencon", std::bind(&CConnman::ThreadOpenConnections, this, connOptions.m_specified_outgoing));

// Process messages
threadMessageHandler = std::thread(&TraceThread<std::function<void()> >, "msghand", std::function<void()>(std::bind(&CConnman::ThreadMessageHandler, this)));
threadMessageHandler = std::thread(&TraceThread, "msghand", std::bind(&CConnman::ThreadMessageHandler, this));

// Dump network addresses
scheduler.scheduleEvery(std::bind(&CConnman::DumpData, this), DUMP_ADDRESSES_INTERVAL * 1000);
Expand Down
5 changes: 4 additions & 1 deletion src/test/test_tapyrus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
#include <rpc/register.h>
#include <script/sigcache.h>
#include <xfieldhistory.h>
#include <util.h>

#include <thread>

constexpr unsigned int CPubKey::SCHNORR_SIGNATURE_SIZE;

Expand Down Expand Up @@ -99,7 +102,7 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
// We have to run a scheduler thread to prevent ActivateBestChain
// from blocking due to queue overrun.
CScheduler::Function serviceLoop = std::bind(&CScheduler::serviceQueue, &scheduler);
scheduler.m_service_thread = std::thread(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop);
scheduler.m_service_thread = std::thread(&TraceThread, "scheduler", serviceLoop);
GetMainSignals().RegisterBackgroundSignalScheduler(scheduler);

mempool.setSanityCheck(1.0);
Expand Down
2 changes: 1 addition & 1 deletion src/torcontrol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ void StartTorControl()
return;
}

torControlThread = std::thread(std::bind(&TraceThread<void (*)()>, "torcontrol", &TorControlThread));
torControlThread = std::thread(std::bind(&TraceThread, "torcontrol", &TorControlThread));
}

void InterruptTorControl()
Expand Down
42 changes: 31 additions & 11 deletions src/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -645,25 +645,25 @@ std::string HelpMessageOpt(const std::string &option, const std::string &message
std::string("\n\n");
}

static std::string FormatException(const std::exception* pex, const char* pszThread)
static std::string FormatException(const std::exception* pex, std::string_view thread_name)
{
#ifdef WIN32
char pszModule[MAX_PATH] = "";
GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule));
char module[MAX_PATH] = "";
GetModuleFileNameA(nullptr, module, sizeof(module));
#else
const char* pszModule = "tapyrus";
std::string module = "tapyrus";
#endif
if (pex)
return strprintf(
"EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, pszThread);
"EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), module, thread_name);
else
return strprintf(
"UNKNOWN EXCEPTION \n%s in %s \n", pszModule, pszThread);
"UNKNOWN EXCEPTION \n%s in %s \n", module, thread_name);
}

void PrintExceptionContinue(const std::exception* pex, const char* pszThread)
void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name)
{
std::string message = FormatException(pex, pszThread);
std::string message = FormatException(pex, thread_name);
LogPrintf("\n\n************************\n%s\n", message);
fprintf(stderr, "\n\n************************\n%s\n", message.c_str());
}
Expand Down Expand Up @@ -1120,22 +1120,42 @@ void runCommand(const std::string& strCommand)
LogPrintf("runCommand error: system(%s) returned %d\n", strCommand, nErr);
}

void RenameThread(const char* name)
void RenameThread(const std::string& name)
{
#if defined(PR_SET_NAME)
// Only the first 15 characters are used (16 - NUL terminator)
::prctl(PR_SET_NAME, name, 0, 0, 0);
#elif (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
pthread_set_name_np(pthread_self(), name);
pthread_set_name_np(pthread_self(), name.c_str());

#elif defined(MAC_OSX)
pthread_setname_np(name);
pthread_setname_np(name.c_str());
#else
// Prevent warnings for unused parameters...
(void)name;
#endif
}

void TraceThread(std::string name, std::function<void()> func)
{
std::string s("tapyrus-"+name);
RenameThread(s);
try
{
LogPrintf("%s thread start\n", name);
func();
LogPrintf("%s thread exit\n", name);
}
catch (const std::exception& e) {
PrintExceptionContinue(&e, name);
throw;
}
catch (...) {
PrintExceptionContinue(nullptr, name);
throw;
}
}

void SetupEnvironment()
{
#ifdef HAVE_MALLOPT_ARENA_MAX
Expand Down
24 changes: 3 additions & 21 deletions src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ bool error(const char* fmt, const Args&... args)
return false;
}

void PrintExceptionContinue(const std::exception *pex, const char* pszThread);
void PrintExceptionContinue(const std::exception *pex, std::string_view thread_name);
bool FileCommit(FILE *file);
bool TruncateFile(FILE *file, unsigned int length);
int RaiseFileDescriptorLimit(int nMinFD);
Expand Down Expand Up @@ -338,30 +338,12 @@ std::string HelpMessageOpt(const std::string& option, const std::string& message
*/
int GetNumCores();

void RenameThread(const char* name);
void RenameThread(const std::string& name);

/**
* .. and a wrapper that just calls func once
*/
template <typename Callable> void TraceThread(const char* name, Callable func)
{
std::string s = strprintf("tapyrus-%s", name);
RenameThread(s.c_str());
try
{
LogPrintf("%s thread start\n", name);
func();
LogPrintf("%s thread exit\n", name);
}
catch (const std::exception& e) {
PrintExceptionContinue(&e, name);
throw;
}
catch (...) {
PrintExceptionContinue(nullptr, name);
throw;
}
}
void TraceThread(std::string name, std::function<void()> func);

std::string CopyrightHolders(const std::string& strPrefix);

Expand Down

0 comments on commit 21209f2

Please sign in to comment.