diff options
| -rw-r--r-- | CHANGELOG.md | 6 | ||||
| -rw-r--r-- | src/zenserver/buildstore/httpbuildstore.cpp | 4 | ||||
| -rw-r--r-- | src/zenstore/gc.cpp | 3 | ||||
| -rw-r--r-- | thirdparty/trace/trace.h | 2 |
4 files changed, 11 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 33b551302..09bf35b3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ ## + +- Bugfix: Fixed invalid namespace+bucket regexes in BuildStore (only fired with new MSVC compiler) +- Bugfix: `GcScheduler` could delay shutdown in some situations +- Bugfix: On exit, trace shutdown can happen before all threads completed their TLS cleanup + +## 5.7.2 - Feature: Added `--force` option to `zen builds download` command that forces download of all content ignoring any local state - Feature: Added `zen oplog-download` command to download the oplog body of a cooked output stored in Cloud DDC - Oplog source is specified using one of the following options diff --git a/src/zenserver/buildstore/httpbuildstore.cpp b/src/zenserver/buildstore/httpbuildstore.cpp index 2a3ce41b7..bce993f17 100644 --- a/src/zenserver/buildstore/httpbuildstore.cpp +++ b/src/zenserver/buildstore/httpbuildstore.cpp @@ -48,8 +48,8 @@ HttpBuildStoreService::Initialize() { ZEN_LOG_INFO(LogBuilds, "Initializing Builds Service"); - m_Router.AddPattern("namespace", "([[:alnum:]-_.]+)"); - m_Router.AddPattern("bucket", "([[:alnum:]-_.]+)"); + m_Router.AddPattern("namespace", "([[:alnum:]\\-_.]+)"); + m_Router.AddPattern("bucket", "([[:alnum:]\\-_.]+)"); m_Router.AddPattern("buildid", "([[:xdigit:]]{24})"); m_Router.AddPattern("hash", "([[:xdigit:]]{40})"); diff --git a/src/zenstore/gc.cpp b/src/zenstore/gc.cpp index 185bc2118..050ee3443 100644 --- a/src/zenstore/gc.cpp +++ b/src/zenstore/gc.cpp @@ -2093,10 +2093,11 @@ GcScheduler::SchedulerThread() { ZEN_ASSERT(WaitTime.count() >= 0); std::unique_lock Lock(m_GcMutex); - while (!Timeout) + while (!Timeout && (Status() != GcSchedulerStatus::kStopped)) { std::chrono::seconds ShortWait = Min(WaitTime, ShortWaitTime); bool ShortTimeout = std::cv_status::timeout == m_GcSignal.wait_for(Lock, ShortWait); + if (ShortTimeout) { if (WaitTime > ShortWaitTime) diff --git a/thirdparty/trace/trace.h b/thirdparty/trace/trace.h index 28fe6a66e..a1fce80a6 100644 --- a/thirdparty/trace/trace.h +++ b/thirdparty/trace/trace.h @@ -4316,6 +4316,7 @@ static void Writer_InternalShutdown() return;
}
Writer_WorkerJoin();
+ AtomicStoreRelaxed(&GInitialized, false);
if (GDataHandle)
{
Writer_FlushSendBuffer();
@@ -4335,7 +4336,6 @@ static void Writer_InternalShutdown() GSendBufferCursor = nullptr;
}
#endif
- AtomicStoreRelaxed(&GInitialized, false);
}
void Writer_InternalInitialize()
{
|