Remove custom memory barriers from header_rewrite and replace with std::atomic
authorPhil Sorber <sorber@apache.org>
Thu, 5 Oct 2017 19:36:43 +0000 (13:36 -0600)
committerJean Baptiste Favre <debian@jbfavre.org>
Mon, 6 Aug 2018 08:56:14 +0000 (09:56 +0100)
Gbp-Pq: Name 0010-Remove-custom-memory-barriers-from-header_rewrite-an.patch

plugins/header_rewrite/conditions.cc
plugins/header_rewrite/lulu.h

index d72bfbdde365522b0397cf821827a5b417826169..46746e377ce8f09d99a6008bcf6fb2fb82324d1a 100644 (file)
@@ -24,6 +24,7 @@
 #include <arpa/inet.h>
 #include <cctype>
 #include <sstream>
+#include <atomic>
 
 #include "ts/ts.h"
 
@@ -174,7 +175,7 @@ ConditionAccess::eval(const Resources & /* res ATS_UNUSED */)
     bool check = !access(_qualifier.c_str(), R_OK);
 
     tv.tv_sec += 2;
-    mb();
+    std::atomic_thread_fence(std::memory_order_seq_cst);
     _next = tv.tv_sec; // I hope this is an atomic "set"...
     _last = check;     // This sure ought to be
   }
index 7688371375edb70f0608571d12d99d2d04441830..b66ee7242dc3934554c17f1f17d12fab6df6a7ab 100644 (file)
@@ -33,39 +33,6 @@ std::string getIP(sockaddr const *s_sockaddr);
 char *getIP(sockaddr const *s_sockaddr, char res[INET6_ADDRSTRLEN]);
 uint16_t getPort(sockaddr const *s_sockaddr);
 
-// Memory barriers
-#if defined(__i386__)
-#define mb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
-#define rmb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__x86_64__)
-#define mb() __asm__ __volatile__("mfence" : : : "memory")
-#define rmb() __asm__ __volatile__("lfence" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__mips__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__arm__)
-#define mb() __asm__ __volatile__("dmb" : : : "memory")
-#define rmb() __asm__ __volatile__("dmb" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__mips__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__powerpc64__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("sync" : : : "memory")
-#elif defined(__aarch64__)
-#define mb() __asm__ __volatile__("dsb sy" : : : "memory")
-#define rmb() __asm__ __volatile__("dsb ld" : : : "memory")
-#define wmb() __asm__ __volatile__("dsb st" : : : "memory")
-#else
-#error "Define barriers"
-#endif
-
 extern const char PLUGIN_NAME[];
 extern const char PLUGIN_NAME_DBG[];