rocksdb-kfreebsd
authorAndrew Kryczka <andrewkr@fb.com>
Wed, 17 Jun 2020 02:34:21 +0000 (19:34 -0700)
committerOtto Kekäläinen <otto@debian.org>
Sun, 28 May 2023 06:16:42 +0000 (23:16 -0700)
Forwarded: https://github.com/facebook/rocksdb/pull/6992

# Merged in RocksDB 6.13.fb, but not updated into MariaDB yet
Bug: https://jira.mariadb.org/browse/MDEV-19251
Description:
 Upstream has merged this but we still need to wait for it to be included
 in a RocksDB release and imported into MariaDB and then into Debian.

Gbp-Pq: Name rocksdb-kfreebsd.patch

storage/rocksdb/build_rocksdb.cmake
storage/rocksdb/rdb_io_watchdog.cc
storage/rocksdb/rdb_io_watchdog.h
storage/rocksdb/rocksdb/CMakeLists.txt
storage/rocksdb/rocksdb/build_tools/build_detect_platform
storage/rocksdb/rocksdb/env/env_posix.cc
storage/rocksdb/rocksdb/port/stack_trace.cc

index 27a8616cfda23b9cc0f02d8997a557aadb38e8b1..b6694bf8de5aaff6baae5372016e77428a3a8b5a 100644 (file)
@@ -90,6 +90,8 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
   add_definitions(-DOS_LINUX)
 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
   add_definitions(-DOS_SOLARIS)
+elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
+  add_definitions(-DOS_GNU_KFREEBSD)
 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
   add_definitions(-DOS_FREEBSD)
 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
index 07834118db036a3e6a5f287ff1a01b0186cfe3a3..cd027fd4ddab2743b138a1996df15a678f1df971 100644 (file)
@@ -111,7 +111,7 @@ void Rdb_io_watchdog::io_check_callback(union sigval timer_data) {
     sql_print_warning("Deleting the watchdog I/O timer failed with %d.", errno);
   }
 
-  m_io_check_watchdog_timer = nullptr;
+  m_io_check_watchdog_timer = reinterpret_cast<timer_t>(-1);
 
   RDB_MUTEX_UNLOCK_CHECK(m_reset_mutex);
 }
index 8ee5b1f6c936e85733e3fee5eebbf30a59fd5c32..d2d2d62faf8c74e88736378da4a10b329277233a 100644 (file)
@@ -56,19 +56,19 @@ class Rdb_io_watchdog {
   int stop_timers() {
     int ret = 0;
 
-    if (m_io_check_watchdog_timer) {
+    if (m_io_check_watchdog_timer != reinterpret_cast<timer_t>(-1)) {
       ret = timer_delete(m_io_check_watchdog_timer);
 
       if (!ret) {
-        m_io_check_watchdog_timer = nullptr;
+        m_io_check_watchdog_timer = reinterpret_cast<timer_t>(-1);
       }
     }
 
-    if (m_io_check_timer && !ret) {
+    if (m_io_check_timer != reinterpret_cast<timer_t>(-1) && !ret) {
       ret = timer_delete(m_io_check_timer);
 
       if (!ret) {
-        m_io_check_timer = nullptr;
+        m_io_check_timer = reinterpret_cast<timer_t>(-1);
       }
     }
 
@@ -93,8 +93,8 @@ class Rdb_io_watchdog {
 
  public:
   explicit Rdb_io_watchdog(std::vector<std::string> &&directories)
-      : m_io_check_timer(nullptr),
-        m_io_check_watchdog_timer(nullptr),
+      : m_io_check_timer(reinterpret_cast<timer_t>(-1)),
+        m_io_check_watchdog_timer(reinterpret_cast<timer_t>(-1)),
         m_io_in_progress(false),
         m_dirs_to_check(std::move(directories)),
         m_buf(nullptr) {
index aeef92e25fe959b0176aa68dea6c2776f9d2a815..40d3bea88b61b059bac062f0879f57a604c977a1 100644 (file)
@@ -91,7 +91,7 @@ if(MSVC)
   option(WITH_XPRESS "build with windows built in compression" OFF)
   include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
 else()
-  if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+  if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
     # FreeBSD has jemalloc as default malloc
     # but it does not have all the jemalloc files in include/...
     set(WITH_JEMALLOC ON)
@@ -413,6 +413,8 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
   add_definitions(-DOS_LINUX)
 elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
   add_definitions(-DOS_SOLARIS)
+elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
+  add_definitions(-DOS_GNU_KFREEBSD)
 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
   add_definitions(-DOS_FREEBSD)
 elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
index 158c161a871f80fbb043b299ada8eb4ab3e4e3e8..708a42cc5b0d7c475d1ee334868d74987d073835 100755 (executable)
@@ -190,6 +190,17 @@ EOF
         PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread"
         # PORT_FILES=port/freebsd/freebsd_specific.cc
         ;;
+    GNU/kFreeBSD)
+        PLATFORM=OS_GNU_KFREEBSD
+        COMMON_FLAGS="$COMMON_FLAGS -DOS_GNU_KFREEBSD"
+        if [ -z "$USE_CLANG" ]; then
+            COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp"
+        else
+            PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -latomic"
+        fi
+        PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread -lrt"
+        # PORT_FILES=port/gnu_kfreebsd/gnu_kfreebsd_specific.cc
+        ;;
     NetBSD)
         PLATFORM=OS_NETBSD
         COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_NETBSD"
index 861fbcf627e42126e816d5ea205a3cfcd1acffb4..92a3b74f6b1ac9d94fee6b3fbabfc5535814ee8a 100644 (file)
@@ -41,7 +41,7 @@
 #include <time.h>
 #include <algorithm>
 // Get nano time includes
-#if defined(OS_LINUX) || defined(OS_FREEBSD)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD)
 #elif defined(__MACH__)
 #include <Availability.h>
 #include <mach/clock.h>
@@ -287,7 +287,8 @@ class PosixEnv : public CompositeEnvWrapper {
   }
 
   uint64_t NowNanos() override {
-#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_AIX)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || \
+    defined(OS_AIX)
     struct timespec ts;
     clock_gettime(CLOCK_MONOTONIC, &ts);
     return static_cast<uint64_t>(ts.tv_sec) * 1000000000 + ts.tv_nsec;
@@ -307,8 +308,8 @@ class PosixEnv : public CompositeEnvWrapper {
   }
 
   uint64_t NowCPUNanos() override {
-#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_AIX) || \
-    (defined(__MACH__) && defined(__MAC_10_12))
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || \
+    defined(OS_AIX) || (defined(__MACH__) && defined(__MAC_10_12))
     struct timespec ts;
     clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
     return static_cast<uint64_t>(ts.tv_sec) * 1000000000 + ts.tv_nsec;
index 32eb45bfbba0438e3bd2fff0b8f73c1a94befd83..35e393147881cb7c3cc488bbfd4332b1bdb114e3 100644 (file)
@@ -32,7 +32,7 @@ namespace port {
 
 namespace {
 
-#if defined(OS_LINUX) || defined(OS_FREEBSD)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD)
 const char* GetExecutableName() {
   static char name[1024];