From e2be099118ebefb9d9849128226cd9b7787ca527 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Sun, 22 Sep 2013 11:02:34 -0700 Subject: [PATCH] compat: define replacement TEMP_FAILURE_RETRY Not all platforms have it. Signed-off-by: Noah Watkins --- src/common/safe_io.c | 1 + src/include/compat.h | 10 +++++++++- src/log/Log.cc | 1 + src/mon/LogMonitor.cc | 1 + src/tools/rados/rados.cc | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/common/safe_io.c b/src/common/safe_io.c index 16cc7293d9cd3..0b31157cd5116 100644 --- a/src/common/safe_io.c +++ b/src/common/safe_io.c @@ -22,6 +22,7 @@ #include #include "common/safe_io.h" +#include "include/compat.h" ssize_t safe_read(int fd, void *buf, size_t count) { diff --git a/src/include/compat.h b/src/include/compat.h index a410acb35f613..f9fd9a6f1f0b5 100644 --- a/src/include/compat.h +++ b/src/include/compat.h @@ -15,8 +15,16 @@ #if defined(__FreeBSD__) #define lseek64(fd, offset, whence) lseek(fd, offset, whence) #define ENODATA 61 -#define TEMP_FAILURE_RETRY #define MSG_MORE 0 #endif /* !__FreeBSD__ */ +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(expression) ({ \ + typeof(expression) __result; \ + do { \ + __result = (expression); \ + } while (__result == -1 && errno == EINTR); \ + __result; }) +#endif + #endif /* !CEPH_COMPAT_H */ diff --git a/src/log/Log.cc b/src/log/Log.cc index afeb1208002e9..f500e3ebf0a27 100644 --- a/src/log/Log.cc +++ b/src/log/Log.cc @@ -13,6 +13,7 @@ #include "common/safe_io.h" #include "common/Clock.h" #include "include/assert.h" +#include "include/compat.h" #define DEFAULT_MAX_NEW 100 #define DEFAULT_MAX_RECENT 10000 diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index a545242577d29..b60656f5f92c9 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -30,6 +30,7 @@ #include "common/config.h" #include "include/assert.h" #include "include/str_list.h" +#include "include/compat.h" #define dout_subsys ceph_subsys_mon #undef dout_prefix diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index ad8eaa3e1a4a2..6c349ad87e196 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -42,6 +42,7 @@ using namespace librados; #include #include "cls/lock/cls_lock_client.h" +#include "include/compat.h" int rados_tool_sync(const std::map < std::string, std::string > &opts, std::vector &args); -- 2.39.5