From 998a289240ca4141f2550a6d89c80d1abdd23df1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 12 Aug 2024 18:49:04 +0200 Subject: [PATCH] Make positionToDocComment thread-safe --- src/libexpr/eval.cc | 10 ++++++---- src/libexpr/eval.hh | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index c7d57b048c8..025a5ec30f8 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -3191,10 +3191,10 @@ Expr * EvalState::parse( std::shared_ptr & staticEnv) { DocCommentMap tmpDocComments; // Only used when not origin is not a SourcePath - DocCommentMap *docComments = &tmpDocComments; + auto * docComments = &tmpDocComments; if (auto sourcePath = std::get_if(&origin)) { - auto [it, _] = positionToDocComment.try_emplace(*sourcePath); + auto [it, _] = positionToDocComment.lock()->try_emplace(*sourcePath); docComments = &it->second; } @@ -3212,8 +3212,10 @@ DocComment EvalState::getDocCommentForPos(PosIdx pos) if (!path) return {}; - auto table = positionToDocComment.find(*path); - if (table == positionToDocComment.end()) + auto positionToDocComment_ = positionToDocComment.readLock(); + + auto table = positionToDocComment_->find(*path); + if (table == positionToDocComment_->end()) return {}; auto it = table->second.find(pos); diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index 433f17ca9b5..75735df28f1 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -331,7 +331,7 @@ private: * Associate source positions of certain AST nodes with their preceding doc comment, if they have one. * Grouped by file. */ - std::unordered_map positionToDocComment; + SharedSync> positionToDocComment; LookupPath lookupPath;