aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/thread.cpp
diff options
context:
space:
mode:
authorLiam Mitchell <[email protected]>2026-03-09 19:06:36 -0700
committerLiam Mitchell <[email protected]>2026-03-09 19:06:36 -0700
commitd1abc50ee9d4fb72efc646e17decafea741caa34 (patch)
treee4288e00f2f7ca0391b83d986efcb69d3ba66a83 /src/zencore/thread.cpp
parentAllow requests with invalid content-types unless specified in command line or... (diff)
parentupdated chunk–block analyser (#818) (diff)
downloadzen-d1abc50ee9d4fb72efc646e17decafea741caa34.tar.xz
zen-d1abc50ee9d4fb72efc646e17decafea741caa34.zip
Merge branch 'main' into lm/restrict-content-type
Diffstat (limited to 'src/zencore/thread.cpp')
-rw-r--r--src/zencore/thread.cpp42
1 files changed, 28 insertions, 14 deletions
diff --git a/src/zencore/thread.cpp b/src/zencore/thread.cpp
index 9e3486e49..54459cbaa 100644
--- a/src/zencore/thread.cpp
+++ b/src/zencore/thread.cpp
@@ -133,7 +133,10 @@ SetCurrentThreadName([[maybe_unused]] std::string_view ThreadName)
#elif ZEN_PLATFORM_MAC
pthread_setname_np(ThreadNameZ.c_str());
#else
- pthread_setname_np(pthread_self(), ThreadNameZ.c_str());
+ // Linux pthread_setname_np has a 16-byte limit (15 chars + NUL)
+ StringBuilder<16> LinuxThreadName;
+ LinuxThreadName << LimitedThreadName.substr(0, 15);
+ pthread_setname_np(pthread_self(), LinuxThreadName.c_str());
#endif
} // namespace zen
@@ -233,12 +236,15 @@ Event::Close()
#else
std::atomic_thread_fence(std::memory_order_acquire);
auto* Inner = (EventInner*)m_EventHandle.load();
+ if (Inner)
{
- std::unique_lock Lock(Inner->Mutex);
- Inner->bSet.store(true);
- m_EventHandle = nullptr;
+ {
+ std::unique_lock Lock(Inner->Mutex);
+ Inner->bSet.store(true);
+ m_EventHandle = nullptr;
+ }
+ delete Inner;
}
- delete Inner;
#endif
}
@@ -351,7 +357,7 @@ NamedEvent::NamedEvent(std::string_view EventName)
intptr_t Packed;
Packed = intptr_t(Sem) << 32;
Packed |= intptr_t(Fd) & 0xffff'ffff;
- m_EventHandle = (void*)Packed;
+ m_EventHandle = (void*)Packed;
#endif
ZEN_ASSERT(m_EventHandle != nullptr);
}
@@ -372,7 +378,9 @@ NamedEvent::Close()
#if ZEN_PLATFORM_WINDOWS
CloseHandle(m_EventHandle);
#elif ZEN_PLATFORM_LINUX || ZEN_PLATFORM_MAC
- int Fd = int(intptr_t(m_EventHandle.load()) & 0xffff'ffff);
+ const intptr_t Handle = intptr_t(m_EventHandle.load());
+ const int Fd = int(Handle & 0xffff'ffff);
+ const int Sem = int(Handle >> 32);
if (flock(Fd, LOCK_EX | LOCK_NB) == 0)
{
@@ -388,11 +396,10 @@ NamedEvent::Close()
}
flock(Fd, LOCK_UN | LOCK_NB);
- close(Fd);
-
- int Sem = int(intptr_t(m_EventHandle.load()) >> 32);
semctl(Sem, 0, IPC_RMID);
}
+
+ close(Fd);
#endif
m_EventHandle = nullptr;
@@ -481,9 +488,12 @@ NamedMutex::~NamedMutex()
CloseHandle(m_MutexHandle);
}
#elif ZEN_PLATFORM_LINUX || ZEN_PLATFORM_MAC
- int Inner = int(intptr_t(m_MutexHandle));
- flock(Inner, LOCK_UN);
- close(Inner);
+ if (m_MutexHandle)
+ {
+ int Inner = int(intptr_t(m_MutexHandle));
+ flock(Inner, LOCK_UN);
+ close(Inner);
+ }
#endif
}
@@ -516,7 +526,6 @@ NamedMutex::Create(std::string_view MutexName)
if (flock(Inner, LOCK_EX) != 0)
{
close(Inner);
- Inner = 0;
return false;
}
@@ -583,6 +592,11 @@ GetCurrentThreadId()
void
Sleep(int ms)
{
+ if (ms <= 0)
+ {
+ return;
+ }
+
#if ZEN_PLATFORM_WINDOWS
::Sleep(ms);
#else