aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYorick van Pelt <yorick@yorickvanpelt.nl>2023-08-11 11:58:33 +0200
committerYorick van Pelt <yorick@yorickvanpelt.nl>2023-08-11 11:58:33 +0200
commitb9b51f9579c15c9789814cd4b6969b0f85e13980 (patch)
tree8d201ba2061e244b139057abd0ca5273f443095c /src
parenta1fdc68c655e8d7ece51b6c84796d35203386c87 (diff)
Prevent overriding virtual methods that are called in a destructor
Virtual methods are no longer valid once the derived destructor has run. This means the compiler is free to optimize them to be non-virtual. Found using clang-tidy
Diffstat (limited to 'src')
-rw-r--r--src/libmain/progress-bar.cc3
-rw-r--r--src/libstore/build/local-derivation-goal.hh4
-rw-r--r--src/libstore/build/substitution-goal.hh3
3 files changed, 7 insertions, 3 deletions
diff --git a/src/libmain/progress-bar.cc b/src/libmain/progress-bar.cc
index 6600ec177..45b1fdfd1 100644
--- a/src/libmain/progress-bar.cc
+++ b/src/libmain/progress-bar.cc
@@ -108,7 +108,8 @@ public:
stop();
}
- void stop() override
+ /* Called by destructor, can't be overridden */
+ void stop() override final
{
{
auto state(state_.lock());
diff --git a/src/libstore/build/local-derivation-goal.hh b/src/libstore/build/local-derivation-goal.hh
index 9acd7593d..8827bfca3 100644
--- a/src/libstore/build/local-derivation-goal.hh
+++ b/src/libstore/build/local-derivation-goal.hh
@@ -272,8 +272,10 @@ struct LocalDerivationGoal : public DerivationGoal
/**
* Forcibly kill the child process, if any.
+ *
+ * Called by destructor, can't be overridden
*/
- void killChild() override;
+ void killChild() override final;
/**
* Kill any processes running under the build user UID or in the
diff --git a/src/libstore/build/substitution-goal.hh b/src/libstore/build/substitution-goal.hh
index 9fc041920..1b693baa1 100644
--- a/src/libstore/build/substitution-goal.hh
+++ b/src/libstore/build/substitution-goal.hh
@@ -114,7 +114,8 @@ public:
void handleChildOutput(int fd, std::string_view data) override;
void handleEOF(int fd) override;
- void cleanup() override;
+ /* Called by destructor, can't be overridden */
+ void cleanup() override final;
JobCategory jobCategory() override { return JobCategory::Substitution; };
};