From 3c25c667352ec4f9c733c514a1b8c15264c6ad88 Mon Sep 17 00:00:00 2001 From: mechanik20051988 <mechanik20.05.1988@gmail.com> Date: Fri, 19 Mar 2021 12:47:15 +0300 Subject: [PATCH] hotfix: change aligned_alloc to posix_memalign Changed aligned_alloc to posix_memalign because in some macOS systems aligned_alloc function is not available. --- src/box/relay.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/box/relay.cc b/src/box/relay.cc index 41f949e8ea..41d3670ffd 100644 --- a/src/box/relay.cc +++ b/src/box/relay.cc @@ -31,6 +31,7 @@ #include "relay.h" #include "trivia/config.h" +#include "trivia/util.h" /** static_assert */ #include "tt_static.h" #include "scoped_guard.h" #include "cbus.h" @@ -55,6 +56,8 @@ #include "txn_limbo.h" #include "raft.h" +#include <stdlib.h> + /** * Cbus message to send status updates from relay to tx thread. */ @@ -201,13 +204,21 @@ relay_new(struct replica *replica) * (Use clang UB Sanitizer, to make sure of this) */ assert((sizeof(struct relay) % alignof(struct relay)) == 0); - struct relay *relay = (struct relay *) - aligned_alloc(alignof(struct relay), sizeof(struct relay)); - if (relay == NULL) { + /* + * According to posix_memalign requirements, align must be + * multiple of sizeof(void *). + */ + static_assert(alignof(struct relay) % sizeof(void *) == 0, + "align for posix_memalign function must be " + "multiple of sizeof(void *)"); + struct relay *relay = NULL; + if (posix_memalign((void **)&relay, alignof(struct relay), + sizeof(struct relay)) != 0) { diag_set(OutOfMemory, sizeof(struct relay), "aligned_alloc", "struct relay"); return NULL; } + assert(relay != NULL); memset(relay, 0, sizeof(struct relay)); relay->replica = replica; -- GitLab