aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md6
-rw-r--r--src/zenserver/buildstore/httpbuildstore.cpp4
-rw-r--r--src/zenstore/gc.cpp3
-rw-r--r--thirdparty/trace/trace.h2
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()
{