MCPcopy Create free account
hub / github.com/apple/foundationdb / stop

Method stop

fdbserver/coroimpl/CoroFlowCoro.actor.cpp:228–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

226 pool->queueLock.leave();
227 }
228 Future<Void> stop(Error const& e) override {
229 if (error.code() == invalid_error_code) {
230 error = e;
231 }
232
233 pool->queueLock.enter();
234 TraceEvent("WorkPool_Stop")
235 .errorUnsuppressed(e)
236 .detail("Workers", pool->workers.size())
237 .detail("Idle", pool->idle.size())
238 .detail("Work", pool->work.size());
239
240 for (uint32_t i = 0; i < pool->work.size(); i++)
241 pool->work[i]->cancel(); // What if cancel() does something to this?
242 pool->work.clear();
243 for (int i = 0; i < pool->workers.size(); i++)
244 pool->workers[i]->stop = true;
245
246 std::vector<Worker*> idle;
247 std::swap(idle, pool->idle);
248 pool->queueLock.leave();
249
250 for (int i = 0; i < idle.size(); i++)
251 idle[i]->unblock();
252
253 pool->allStopped.add(Void());
254
255 return pool->allStopped.getResult();
256 }
257 bool isCoro() const override { return IS_CORO; }
258 void addref() override { ReferenceCounted<WorkPool>::addref(); }
259 void delref() override { ReferenceCounted<WorkPool>::delref(); }

Callers 1

stopOnErrorMethod · 0.45

Calls 13

TraceEventClass · 0.85
swapFunction · 0.85
detailMethod · 0.80
getResultMethod · 0.80
cancelMethod · 0.65
clearMethod · 0.65
VoidClass · 0.50
codeMethod · 0.45
enterMethod · 0.45
sizeMethod · 0.45
leaveMethod · 0.45
unblockMethod · 0.45

Tested by

no test coverage detected