From c6a0e0439ed2ed4abe6bb3adbc862b6f573c415a Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Thu, 25 Mar 2021 13:48:30 +0300 Subject: [PATCH] files: Construct file_impls properly Constructors of classes inherited from file_impl copy alignment values by hands, but miss the overwrite one, thus on a new file it remains default-initialized. To fix this and not to forget to properly initalize future fields from file_impl, use the impl's copy constructor. tests: unit(dev) Signed-off-by: Pavel Emelyanov Message-Id: <20210325104830.31923-1-xemul@scylladb.com> --- checked-file-impl.hh | 5 +---- reader_concurrency_semaphore.cc | 6 ++---- sstables/integrity_checked_file_impl.cc | 5 +---- tracing/traced_file.cc | 5 +---- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/checked-file-impl.hh b/checked-file-impl.hh index aab16cec6f..050edbcb54 100644 --- a/checked-file-impl.hh +++ b/checked-file-impl.hh @@ -31,10 +31,7 @@ class checked_file_impl : public file_impl { public: checked_file_impl(const io_error_handler& error_handler, file f) - : _error_handler(error_handler), _file(f) { - _memory_dma_alignment = f.memory_dma_alignment(); - _disk_read_dma_alignment = f.disk_read_dma_alignment(); - _disk_write_dma_alignment = f.disk_write_dma_alignment(); + : file_impl(*get_file_impl(f)), _error_handler(error_handler), _file(f) { } virtual future write_dma(uint64_t pos, const void* buffer, size_t len, const io_priority_class& pc) override { diff --git a/reader_concurrency_semaphore.cc b/reader_concurrency_semaphore.cc index 6c7e9406d3..0cfb6086ca 100644 --- a/reader_concurrency_semaphore.cc +++ b/reader_concurrency_semaphore.cc @@ -574,11 +574,9 @@ class tracking_file_impl : public file_impl { public: tracking_file_impl(file file, reader_permit permit) - : _tracked_file(std::move(file)) + : file_impl(*get_file_impl(file)) + , _tracked_file(std::move(file)) , _permit(std::move(permit)) { - _memory_dma_alignment = _tracked_file.memory_dma_alignment(); - _disk_read_dma_alignment = _tracked_file.disk_read_dma_alignment(); - _disk_write_dma_alignment = _tracked_file.disk_write_dma_alignment(); } tracking_file_impl(const tracking_file_impl&) = delete; diff --git a/sstables/integrity_checked_file_impl.cc b/sstables/integrity_checked_file_impl.cc index ea559d0e2c..de378b7d03 100644 --- a/sstables/integrity_checked_file_impl.cc +++ b/sstables/integrity_checked_file_impl.cc @@ -27,10 +27,7 @@ namespace sstables { integrity_checked_file_impl::integrity_checked_file_impl(sstring fname, file f) - : _fname(std::move(fname)), _file(f) { - _memory_dma_alignment = f.memory_dma_alignment(); - _disk_read_dma_alignment = f.disk_read_dma_alignment(); - _disk_write_dma_alignment = f.disk_write_dma_alignment(); + : file_impl(*get_file_impl(f)), _fname(std::move(fname)), _file(f) { } static bytes data_sample(const int8_t* buf, size_t buf_len, size_t sample_off, size_t sample_len) { diff --git a/tracing/traced_file.cc b/tracing/traced_file.cc index 3128004762..1ab23d3624 100644 --- a/tracing/traced_file.cc +++ b/tracing/traced_file.cc @@ -53,10 +53,7 @@ public: }; traced_file_impl::traced_file_impl(file f, tracing::trace_state_ptr trace_state, sstring trace_prefix) - : _f(std::move(f)), _trace_state(std::move(trace_state)), _trace_prefix(std::move(trace_prefix)) { - _memory_dma_alignment = _f.memory_dma_alignment(); - _disk_read_dma_alignment = _f.disk_read_dma_alignment(); - _disk_write_dma_alignment = _f.disk_write_dma_alignment(); + : file_impl(*get_file_impl(f)), _f(std::move(f)), _trace_state(std::move(trace_state)), _trace_prefix(std::move(trace_prefix)) { } future