diff options
| author | Dan Engelbrecht <[email protected]> | 2023-08-31 08:50:41 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-31 14:50:41 +0200 |
| commit | 3dd0d7c7079af34ae38ca208f940bb75bccee5c7 (patch) | |
| tree | 74e21fa4c0a00eb4baf3955be9666ebea38c3b8f /src/zenserver/projectstore/httpprojectstore.cpp | |
| parent | fix zen server state mac mmap (#380) (diff) | |
| download | zen-3dd0d7c7079af34ae38ca208f940bb75bccee5c7.tar.xz zen-3dd0d7c7079af34ae38ca208f940bb75bccee5c7.zip | |
project store gc deadlock (#381)
* Trying to recursively take a shared RWLock while another thread is waiting for a exclusive lock results in a deadlock. Forward the shared lock so we don't have to grab it recursively.
* changelog
Diffstat (limited to 'src/zenserver/projectstore/httpprojectstore.cpp')
| -rw-r--r-- | src/zenserver/projectstore/httpprojectstore.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/zenserver/projectstore/httpprojectstore.cpp b/src/zenserver/projectstore/httpprojectstore.cpp index 9a5894c56..d28d49d1f 100644 --- a/src/zenserver/projectstore/httpprojectstore.cpp +++ b/src/zenserver/projectstore/httpprojectstore.cpp @@ -1626,7 +1626,7 @@ HttpProjectService::HandleDetailsRequest(HttpRouterRequest& Req) CSVHeader(Details, AttachmentDetails, CSVWriter); m_ProjectStore->IterateProjects([&](ProjectStore::Project& Project) { - Project.IterateOplogs([&](ProjectStore::Oplog& Oplog) { + Project.IterateOplogs([&](const RwLock::SharedLockScope&, ProjectStore::Oplog& Oplog) { Oplog.IterateOplogWithKey( [this, &Project, &Oplog, &CSVWriter, Details, AttachmentDetails](int LSN, const Oid& Key, CbObject Op) { CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter); @@ -1681,7 +1681,7 @@ HttpProjectService::HandleProjectDetailsRequest(HttpRouterRequest& Req) ExtendableStringBuilder<4096> CSVWriter; CSVHeader(Details, AttachmentDetails, CSVWriter); - FoundProject->IterateOplogs([&](ProjectStore::Oplog& Oplog) { + FoundProject->IterateOplogs([&](const RwLock::SharedLockScope&, ProjectStore::Oplog& Oplog) { Oplog.IterateOplogWithKey( [this, &Project, &Oplog, &CSVWriter, Details, AttachmentDetails](int LSN, const Oid& Key, CbObject Op) { CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter); |