diff options
author | Marijn Suijten <marijns95@gmail.com> | 2021-11-03 17:40:19 +0100 |
---|---|---|
committer | Georg Chini <georg@chini.tk> | 2021-11-05 07:50:56 +0000 |
commit | add6e71e4ca7a280b51e7e0e29784f5382e449a0 (patch) | |
tree | ba4ab5a667b4c6d9c8e053a6bb99e758966e9ac2 | |
parent | 6e1ba7179c527b3a1d8c86e7e58523f75d60bfac (diff) |
pulsecore/shm: Remove shm_marker struct packing for pa_atomic_t fields
Taking addresses of fields in a packed struct are not guaranteed to be
aligned, resulting in warnings such as:
../src/pulsecore/shm.c: In function 'sharedmem_create':
../src/pulsecore/shm.c:198:25: error: taking address of packed member of 'struct shm_marker' may result in an unaligned pointer value [-Werror=address-of-packed-member]
198 | pa_atomic_store(&marker->pid, (int) getpid());
| ^~~~~~~~~~~~
The struct already has its fields and types laid out in such a way that
the desired packing (without padding) is guaranteed - enforce this with
a `static_assert` to get rid of the unaligned pointer warning.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/653>
-rw-r--r-- | src/pulsecore/shm.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c index 0742cb88c..e464f6bce 100644 --- a/src/pulsecore/shm.c +++ b/src/pulsecore/shm.c @@ -91,7 +91,10 @@ struct shm_marker { uint64_t _reserved2; uint64_t _reserved3; uint64_t _reserved4; -} PA_GCC_PACKED; +}; + +// Ensure struct is appropriately packed +static_assert(sizeof(struct shm_marker) == 8 * 5, "`struct shm_marker` is not tightly packed"); static inline size_t shm_marker_size(pa_mem_type_t type) { if (type == PA_MEM_TYPE_SHARED_POSIX) |