common/wall_clock: Add virtual destructors

From -fsanitize=address, this code wasn't calling the proper destructor.
Adding virtual destructors for each inherited class and the base class
fixes this bug.

While we are at it, mark the functions as final.
This commit is contained in:
ReinUsesLisp 2020-09-29 16:19:37 -03:00
parent e61d8de5f6
commit a66d8bb49d
3 changed files with 4 additions and 2 deletions

View file

@ -15,7 +15,7 @@ namespace Common {
using base_timer = std::chrono::steady_clock; using base_timer = std::chrono::steady_clock;
using base_time_point = std::chrono::time_point<base_timer>; using base_time_point = std::chrono::time_point<base_timer>;
class StandardWallClock : public WallClock { class StandardWallClock final : public WallClock {
public: public:
StandardWallClock(u64 emulated_cpu_frequency, u64 emulated_clock_frequency) StandardWallClock(u64 emulated_cpu_frequency, u64 emulated_clock_frequency)
: WallClock(emulated_cpu_frequency, emulated_clock_frequency, false) { : WallClock(emulated_cpu_frequency, emulated_clock_frequency, false) {

View file

@ -13,6 +13,8 @@ namespace Common {
class WallClock { class WallClock {
public: public:
virtual ~WallClock() = default;
/// Returns current wall time in nanoseconds /// Returns current wall time in nanoseconds
[[nodiscard]] virtual std::chrono::nanoseconds GetTimeNS() = 0; [[nodiscard]] virtual std::chrono::nanoseconds GetTimeNS() = 0;

View file

@ -12,7 +12,7 @@
namespace Common { namespace Common {
namespace X64 { namespace X64 {
class NativeClock : public WallClock { class NativeClock final : public WallClock {
public: public:
NativeClock(u64 emulated_cpu_frequency, u64 emulated_clock_frequency, u64 rtsc_frequency); NativeClock(u64 emulated_cpu_frequency, u64 emulated_clock_frequency, u64 rtsc_frequency);