aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/neh/neh.cpp
diff options
context:
space:
mode:
authorsvidyuk <svidyuk@yandex-team.com>2022-11-14 12:03:26 +0300
committersvidyuk <svidyuk@yandex-team.com>2022-11-14 12:03:26 +0300
commit27d8c0c44daf7a5aba953248a3682667db688669 (patch)
treec7b10fe156ae6deef1d6ae19cc8ef509925ac463 /library/cpp/neh/neh.cpp
parent1d1f495e76f87ee31598b60ea254edce5e6c78f5 (diff)
downloadydb-27d8c0c44daf7a5aba953248a3682667db688669.tar.gz
rework pom generation to support EXCLUDES
Diffstat (limited to 'library/cpp/neh/neh.cpp')
-rw-r--r--library/cpp/neh/neh.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/library/cpp/neh/neh.cpp b/library/cpp/neh/neh.cpp
index 2a3eef5023..8b3092ad57 100644
--- a/library/cpp/neh/neh.cpp
+++ b/library/cpp/neh/neh.cpp
@@ -43,12 +43,20 @@ namespace {
};
public:
+ ~TMultiRequester() {
+ for (auto& req : Reqs_) {
+ req->Register(nullptr);
+ }
+ }
+
void Add(const THandleRef& req) override {
Reqs_.insert(req);
+ req->Register(&WaitQueue_);
}
void Del(const THandleRef& req) override {
Reqs_.erase(req);
+ req->Register(nullptr);
}
bool Wait(THandleRef& req, TInstant deadLine) override {
@@ -56,11 +64,8 @@ namespace {
if (Reqs_.empty()) {
return false;
}
-
TOnComplete cb(this);
-
- WaitForMultipleObj(Reqs_.begin(), Reqs_.end(), deadLine, cb);
-
+ WaitForMultipleObj(WaitQueue_, deadLine, cb);
if (!cb.Signalled) {
return false;
}
@@ -78,12 +83,13 @@ namespace {
inline void OnComplete(const THandleRef& req) {
Complete_.push_back(req);
- Reqs_.erase(req);
+ Del(req);
}
private:
typedef THashSet<THandleRef, TOps, TOps> TReqs;
typedef TList<THandleRef> TComplete;
+ TWaitQueue WaitQueue_;
TReqs Reqs_;
TComplete Complete_;
};