mirror of
https://github.com/yse/easy_profiler.git
synced 2024-12-28 01:04:41 +08:00
Check thread expired on linux and add new message in easy_net
This commit is contained in:
parent
a7ac056021
commit
f788071003
@ -64,6 +64,7 @@ enum MessageType : uint8_t
|
|||||||
|
|
||||||
MESSAGE_TYPE_EVENT_TRACING_STATUS,
|
MESSAGE_TYPE_EVENT_TRACING_STATUS,
|
||||||
MESSAGE_TYPE_EVENT_TRACING_PRIORITY,
|
MESSAGE_TYPE_EVENT_TRACING_PRIORITY,
|
||||||
|
MESSAGE_TYPE_CHECK_CONNECTION
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Message
|
struct Message
|
||||||
|
@ -47,6 +47,10 @@
|
|||||||
#include "event_trace_win.h"
|
#include "event_trace_win.h"
|
||||||
#include "current_time.h"
|
#include "current_time.h"
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
#include <signal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -305,9 +309,10 @@ public:
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ThreadStorage::ThreadStorage() : id(getCurrentThreadId()), allowChildren(true), named(false)
|
ThreadStorage::ThreadStorage() : id(getCurrentThreadId()), allowChildren(true), named(false), pthread_id(pthread_self())
|
||||||
{
|
{
|
||||||
expired = ATOMIC_VAR_INIT(false);
|
expired = ATOMIC_VAR_INIT(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadStorage::storeBlock(const profiler::Block& block)
|
void ThreadStorage::storeBlock(const profiler::Block& block)
|
||||||
@ -660,7 +665,7 @@ bool ProfileManager::checkThreadExpired(ThreadStorage& _registeredThread)
|
|||||||
|
|
||||||
DWORD exitCode = 0;
|
DWORD exitCode = 0;
|
||||||
auto hThread = OpenThread(THREAD_QUERY_LIMITED_INFORMATION, FALSE, _registeredThread.id);
|
auto hThread = OpenThread(THREAD_QUERY_LIMITED_INFORMATION, FALSE, _registeredThread.id);
|
||||||
if (hThread == nullptr || GetExitCodeThread(hThread, &exitCode) == FALSE || exitCode != STILL_ACTIVE)
|
if (hThread == nullptr || GetExitCodeThread(hThread, &exitCode) == FALSE || exitCode != STILL_ACTIVE)
|
||||||
{
|
{
|
||||||
// Thread has been expired
|
// Thread has been expired
|
||||||
_registeredThread.expired.store(true, std::memory_order_release);
|
_registeredThread.expired.store(true, std::memory_order_release);
|
||||||
@ -671,14 +676,14 @@ bool ProfileManager::checkThreadExpired(ThreadStorage& _registeredThread)
|
|||||||
|
|
||||||
if (hThread != nullptr)
|
if (hThread != nullptr)
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
|
return false;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// TODO: Check thread for Linux
|
return pthread_kill(_registeredThread.pthread_id, 0) != 0;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -976,6 +981,13 @@ void ProfileManager::listen()
|
|||||||
|
|
||||||
switch (message->type)
|
switch (message->type)
|
||||||
{
|
{
|
||||||
|
case profiler::net::MESSAGE_TYPE_CHECK_CONNECTION:
|
||||||
|
{
|
||||||
|
#ifdef EASY_DEBUG_NET_PRINT
|
||||||
|
printf("receive MESSAGE_TYPE_CHECK_CONNECTION\n");
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
case profiler::net::MESSAGE_TYPE_REQUEST_START_CAPTURE:
|
case profiler::net::MESSAGE_TYPE_REQUEST_START_CAPTURE:
|
||||||
{
|
{
|
||||||
#ifdef EASY_DEBUG_NET_PRINT
|
#ifdef EASY_DEBUG_NET_PRINT
|
||||||
|
@ -309,6 +309,11 @@ struct ThreadStorage
|
|||||||
BlocksList<std::reference_wrapper<profiler::Block>, SIZEOF_CSWITCH * (uint16_t)128U> blocks;
|
BlocksList<std::reference_wrapper<profiler::Block>, SIZEOF_CSWITCH * (uint16_t)128U> blocks;
|
||||||
BlocksList<profiler::Block, SIZEOF_CSWITCH * (uint16_t)128U> sync;
|
BlocksList<profiler::Block, SIZEOF_CSWITCH * (uint16_t)128U> sync;
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
const pthread_t pthread_id;
|
||||||
|
#endif
|
||||||
|
|
||||||
const profiler::thread_id_t id;
|
const profiler::thread_id_t id;
|
||||||
std::atomic_bool expired;
|
std::atomic_bool expired;
|
||||||
bool allowChildren;
|
bool allowChildren;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user