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