libstore: always wake up goals on EOF

all goals do this. it makes no sense to not notify a goal of EOF
conditions because this is the universal signal for "child done"

Change-Id: Ic3980de312547e616739c57c6248a8e81308b5ee
This commit is contained in:
eldritch horrors 2024-07-25 18:05:42 +02:00
parent 6c0dcd1220
commit d9af753a7f
7 changed files with 1 additions and 15 deletions

View file

@ -1363,7 +1363,6 @@ void DerivationGoal::handleChildOutput(int fd, std::string_view data)
void DerivationGoal::handleEOF(int fd) void DerivationGoal::handleEOF(int fd)
{ {
if (!currentLogLine.empty()) flushLine(); if (!currentLogLine.empty()) flushLine();
worker.wakeUp(shared_from_this());
} }

View file

@ -162,10 +162,5 @@ void DrvOutputSubstitutionGoal::work()
(this->*state)(); (this->*state)();
} }
void DrvOutputSubstitutionGoal::handleEOF(int fd)
{
worker.wakeUp(shared_from_this());
}
} }

View file

@ -72,7 +72,6 @@ public:
std::string key() override; std::string key() override;
void work() override; void work() override;
void handleEOF(int fd) override;
JobCategory jobCategory() const override { JobCategory jobCategory() const override {
return JobCategory::Substitution; return JobCategory::Substitution;

View file

@ -145,7 +145,6 @@ public:
virtual void handleEOF(int fd) virtual void handleEOF(int fd)
{ {
abort();
} }
void trace(std::string_view s); void trace(std::string_view s);

View file

@ -294,12 +294,6 @@ void PathSubstitutionGoal::handleChildOutput(int fd, std::string_view data)
} }
void PathSubstitutionGoal::handleEOF(int fd)
{
worker.wakeUp(shared_from_this());
}
void PathSubstitutionGoal::cleanup() void PathSubstitutionGoal::cleanup()
{ {
try { try {

View file

@ -110,7 +110,6 @@ public:
* Callback used by the worker to write to the log. * Callback used by the worker to write to the log.
*/ */
void handleChildOutput(int fd, std::string_view data) override; void handleChildOutput(int fd, std::string_view data) override;
void handleEOF(int fd) override;
/* Called by destructor, can't be overridden */ /* Called by destructor, can't be overridden */
void cleanup() override final; void cleanup() override final;

View file

@ -459,6 +459,7 @@ void Worker::waitForInput()
if (rd == 0 || (rd == -1 && errno == EIO)) { if (rd == 0 || (rd == -1 && errno == EIO)) {
debug("%1%: got EOF", goal->getName()); debug("%1%: got EOF", goal->getName());
goal->handleEOF(k); goal->handleEOF(k);
wakeUp(goal);
j->fds.erase(k); j->fds.erase(k);
} else if (rd == -1) { } else if (rd == -1) {
if (errno != EINTR) if (errno != EINTR)