From f8e7c0f80fe4dd5ce23c504829e4df3e5904956f Mon Sep 17 00:00:00 2001
From: Li
Date: Mon, 20 Apr 2026 10:36:03 +0000
Subject: [PATCH] Fix massive lag spike when starting on haiku
---
.gitignore | 1 +
.../lib_projects/raknet/jni/RaknetSources/RakPeer.cpp | 3 ++-
.../raknet/jni/RaknetSources/RakThread.cpp | 11 ++++++-----
.../raknet/jni/RaknetSources/SocketLayer.cpp | 8 ++++----
src/raknet/RakPeer.cpp | 3 ++-
src/raknet/RakThread.cpp | 10 ++++++----
src/raknet/SocketLayer.cpp | 6 ++++--
7 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/.gitignore b/.gitignore
index 5465697..d76aac1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ out/
bin/
lib/
build-apk/
+build-haiku/
cmake-build-*/
CMakeFiles/
CMakeCache.txt
diff --git a/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp b/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp
index a24a2b5..5e6de82 100755
--- a/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp
+++ b/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp
@@ -351,7 +351,8 @@ StartupResult RakPeer::Startup( unsigned short maxConnections, SocketDescriptor
#if defined(_WIN32)
threadPriority=0;
-
+#elif defined(__HAIKU__)
+ threadPriority=40;
#else
threadPriority=1000;
#endif
diff --git a/project/lib_projects/raknet/jni/RaknetSources/RakThread.cpp b/project/lib_projects/raknet/jni/RaknetSources/RakThread.cpp
index 268ee3a..5b91ff3 100755
--- a/project/lib_projects/raknet/jni/RaknetSources/RakThread.cpp
+++ b/project/lib_projects/raknet/jni/RaknetSources/RakThread.cpp
@@ -17,8 +17,8 @@ using namespace RakNet;
#endif
-
-
+#elif defined(__HAIKU__)
+#include
#else
#include
#endif
@@ -93,9 +93,10 @@ int RakThread::Create( void* start_address( void* ), void *arglist, int priority
-
-
-
+#elif defined(__HAIKU__)
+ thread_id threadHandle = spawn_thread((thread_func)start_address, "RakThread", priority, arglist);
+ int res = resume_thread(threadHandle);
+ return res == B_OK ? 0 : 1;
#else
pthread_t threadHandle;
// Create thread linux
diff --git a/project/lib_projects/raknet/jni/RaknetSources/SocketLayer.cpp b/project/lib_projects/raknet/jni/RaknetSources/SocketLayer.cpp
index 4ed4aae..3731571 100755
--- a/project/lib_projects/raknet/jni/RaknetSources/SocketLayer.cpp
+++ b/project/lib_projects/raknet/jni/RaknetSources/SocketLayer.cpp
@@ -1665,7 +1665,7 @@ void GetMyIP_Win32( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
}
}
// #else
-/*
+
void GetMyIP_Linux( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
{
struct ifaddrs *ifaddr, *ifa;
@@ -1716,7 +1716,7 @@ void GetMyIP_Linux( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
freeifaddrs(ifaddr);
}
-*/
+
@@ -1724,10 +1724,10 @@ void SocketLayer::GetMyIP( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_ID
{
-
-
#if defined(_WIN32)
GetMyIP_Win32(addresses);
+#elif defined(__HAIKU__)
+ GetMyIP_Linux(addresses);
#else
// GetMyIP_Linux(addresses);
GetMyIP_Win32(addresses);
diff --git a/src/raknet/RakPeer.cpp b/src/raknet/RakPeer.cpp
index a24a2b5..5e6de82 100755
--- a/src/raknet/RakPeer.cpp
+++ b/src/raknet/RakPeer.cpp
@@ -351,7 +351,8 @@ StartupResult RakPeer::Startup( unsigned short maxConnections, SocketDescriptor
#if defined(_WIN32)
threadPriority=0;
-
+#elif defined(__HAIKU__)
+ threadPriority=40;
#else
threadPriority=1000;
#endif
diff --git a/src/raknet/RakThread.cpp b/src/raknet/RakThread.cpp
index 268ee3a..184bea7 100755
--- a/src/raknet/RakThread.cpp
+++ b/src/raknet/RakThread.cpp
@@ -19,6 +19,8 @@ using namespace RakNet;
+#elif defined(__HAIKU__)
+#include
#else
#include
#endif
@@ -92,10 +94,10 @@ int RakThread::Create( void* start_address( void* ), void *arglist, int priority
-
-
-
-
+#elif defined(__HAIKU__)
+ thread_id threadHandle = spawn_thread((thread_func)start_address, "RakThread", priority, arglist);
+ int res = resume_thread(threadHandle);
+ return res == B_OK ? 0 : 1;
#else
pthread_t threadHandle;
// Create thread linux
diff --git a/src/raknet/SocketLayer.cpp b/src/raknet/SocketLayer.cpp
index 55d5327..aab591b 100755
--- a/src/raknet/SocketLayer.cpp
+++ b/src/raknet/SocketLayer.cpp
@@ -1665,7 +1665,7 @@ void GetMyIP_Win32( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
}
}
// #else
-/*
+
void GetMyIP_Linux( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
{
struct ifaddrs *ifaddr, *ifa;
@@ -1716,7 +1716,7 @@ void GetMyIP_Linux( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
freeifaddrs(ifaddr);
}
-*/
+
@@ -1728,6 +1728,8 @@ void SocketLayer::GetMyIP( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_ID
#if defined(_WIN32)
GetMyIP_Win32(addresses);
+#elif defined(__HAIKU__)
+ GetMyIP_Linux(addresses);
#else
// GetMyIP_Linux(addresses);
GetMyIP_Win32(addresses);