Remove explicit padding from CacheAlignedInstrumentedMutex (#9809)

Summary:
Fixes https://github.com/facebook/rocksdb/issues/9779.

The padding at the end of a struct is added implicitly according to the
sizeof spec: "When applied to a class, the result is the
number of bytes in an object of that class including any padding
required for placing objects of that type in an array"
(https://eel.is/c++draft/expr.sizeof#2.sentence-2). We should drop the
explicit padding since it assumed support for zero-length arrays, which
is non-standard.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/9809

Test Plan: rely on CI

Reviewed By: riversand963

Differential Revision: D35413496

Pulled By: ajkr

fbshipit-source-id: 25d52ca45e648ad0d5657149f26f6adecbed1cb4
This commit is contained in:
Andrew Kryczka 2022-04-05 18:32:05 -07:00 committed by Facebook GitHub Bot
parent 60ceb8d0e2
commit 3ae9c5309b

View File

@ -54,10 +54,9 @@ class InstrumentedMutex {
class ALIGN_AS(CACHE_LINE_SIZE) CacheAlignedInstrumentedMutex class ALIGN_AS(CACHE_LINE_SIZE) CacheAlignedInstrumentedMutex
: public InstrumentedMutex { : public InstrumentedMutex {
using InstrumentedMutex::InstrumentedMutex; using InstrumentedMutex::InstrumentedMutex;
char padding[(CACHE_LINE_SIZE - sizeof(InstrumentedMutex) % CACHE_LINE_SIZE) %
CACHE_LINE_SIZE] ROCKSDB_FIELD_UNUSED;
}; };
static_assert(sizeof(CacheAlignedInstrumentedMutex) % CACHE_LINE_SIZE == 0); static_assert(alignof(CacheAlignedInstrumentedMutex) != CACHE_LINE_SIZE ||
sizeof(CacheAlignedInstrumentedMutex) % CACHE_LINE_SIZE == 0);
// RAII wrapper for InstrumentedMutex // RAII wrapper for InstrumentedMutex
class InstrumentedMutexLock { class InstrumentedMutexLock {