Skip to content

Commit

Permalink
Fix abort when the GC thread gets an exception
Browse files Browse the repository at this point in the history
  • Loading branch information
edolstra committed Sep 6, 2017
1 parent 0b606aa commit 1277aab
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions src/libstore/gc.cc
Expand Up @@ -887,24 +887,32 @@ void LocalStore::autoGC(bool sync)

std::thread([promise{std::move(promise)}, this, avail, getAvail]() mutable {

/* Wake up any threads waiting for the auto-GC to finish. */
Finally wakeup([&]() {
auto state(_state.lock());
state->gcRunning = false;
state->lastGCCheck = std::chrono::steady_clock::now();
promise.set_value();
});
try {

printInfo("running auto-GC to free %d bytes", settings.maxFree - avail);
/* Wake up any threads waiting for the auto-GC to finish. */
Finally wakeup([&]() {
auto state(_state.lock());
state->gcRunning = false;
state->lastGCCheck = std::chrono::steady_clock::now();
promise.set_value();
});

GCOptions options;
options.maxFreed = settings.maxFree - avail;
printInfo("running auto-GC to free %d bytes", settings.maxFree - avail);

GCResults results;
GCOptions options;
options.maxFreed = settings.maxFree - avail;

collectGarbage(options, results);
GCResults results;

_state.lock()->availAfterGC = getAvail();
collectGarbage(options, results);

_state.lock()->availAfterGC = getAvail();

} catch (...) {
// FIXME: we could propagate the exception to the
// future, but we don't really care.
ignoreException();
}

}).detach();
}
Expand Down

0 comments on commit 1277aab

Please sign in to comment.