Skip to content

Commit bee15ad

Browse files
committed
comments
1 parent 2ca6e64 commit bee15ad

File tree

6 files changed

+16
-8
lines changed

6 files changed

+16
-8
lines changed

src/c++/perf_analyzer/concurrency_worker.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ ConcurrencyWorker::HandleNoConcurrency()
133133
wake_signal_.wait(lock, [this]() {
134134
return exiting_ || (thread_config_->concurrency_ > 0);
135135
});
136-
// Stop executing if concurrency is 0 and early exit is requested
136+
// Stop executing if concurrency is 0 and we are exiting
137137
if (exiting_ && thread_config_->concurrency_ == 0) {
138138
return true;
139139
}
@@ -181,7 +181,7 @@ ConcurrencyWorker::WaitForResponses()
181181
std::unique_lock<std::mutex> lk(cb_mtx_);
182182
thread_stat_->idle_timer.Start();
183183
cb_cv_.wait(lk, [this] {
184-
if (notified_ || exiting_) {
184+
if (notified_ || (exiting_ && fast_exit_)) {
185185
notified_ = false;
186186
return true;
187187
}

src/c++/perf_analyzer/infer_context.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,9 @@ InferContext::AsyncCallbackFuncImpl(cb::InferResult* result)
298298
// Add the request record to thread request records vector with
299299
// proper locking
300300
std::lock_guard<std::mutex> lock(thread_stat_->mu_);
301+
302+
// If we are fast exiting, do not handle the request and instead exit
303+
// immediately
301304
if (exiting_ && fast_exit_) {
302305
return;
303306
}

src/c++/perf_analyzer/infer_context.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ class InferContext {
105105
void Init();
106106

107107
// Signal to the context to stop working and exit
108+
// If fast exit is true, everything should be immediately dropped
109+
// If fast exit is false, the context should still handle outstanding requests
110+
// before exiting
108111
void Exit(bool fast_exit)
109112
{
110113
exiting_ = true;

src/c++/perf_analyzer/load_manager.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,6 @@ LoadManager::StopWorkerThreads()
250250
{
251251
bool fast_exit = shared_memory_type_ == SharedMemoryType::NO_SHARED_MEMORY;
252252

253-
// FIXME do I need to acquire the lock first?
254253
for (auto& worker : workers_) {
255254
worker->Exit(fast_exit);
256255
}

src/c++/perf_analyzer/load_worker.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ LoadWorker::Exit(bool fast_exit)
4141
ctx->Exit(fast_exit);
4242
}
4343

44-
exiting_ = true;
4544
fast_exit_ = fast_exit;
45+
exiting_ = true;
4646

4747
{
4848
std::lock_guard<std::mutex> lk(cb_mtx_);
@@ -68,9 +68,8 @@ LoadWorker::HandleExitConditions()
6868
{
6969
if (ShouldExit()) {
7070
CompleteOngoingSequences();
71-
if (!fast_exit_) {
72-
WaitForOngoingRequests();
73-
}
71+
thread_stat_->idle_timer.Start();
72+
WaitForOngoingRequests();
7473
return true;
7574
}
7675
return false;
@@ -90,7 +89,7 @@ LoadWorker::CompleteOngoingSequences()
9089
void
9190
LoadWorker::WaitForOngoingRequests()
9291
{
93-
while (GetNumOngoingRequests() != 0 && !fast_exit_) {
92+
while (GetNumOngoingRequests() != 0 && !(exiting_ && fast_exit_)) {
9493
std::this_thread::sleep_for(std::chrono::milliseconds(50));
9594
}
9695
}

src/c++/perf_analyzer/load_worker.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ class LoadWorker : public IWorker {
6969

7070
virtual ~LoadWorker() = default;
7171

72+
// Tell the worker thread to stop issuing new requests and to exit
73+
// If fast_exit is true, the worker thread should exit as fast as possible. If
74+
// it is false, it should still wait for all outstanding requests before
75+
// exiting
7276
virtual void Exit(bool fast_exit) override;
7377

7478
protected:

0 commit comments

Comments
 (0)