aboutsummaryrefslogtreecommitdiff
path: root/src/jthread
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2015-04-07 06:13:12 -0400
committerShadowNinja <shadowninja@minetest.net>2015-08-23 22:04:06 -0400
commite4bff8be94c0db4f94e63ad448d0eeb869ccdbbd (patch)
tree7935586e79da5c8c7144e345a8c0fc1cda53beed /src/jthread
parent6a1047d8c116f793890b63427d53f04ceca95d54 (diff)
downloadminetest-e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd.tar.gz
minetest-e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd.tar.bz2
minetest-e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd.zip
Clean up threading
* Rename everything. * Strip J prefix. * Change UpperCamelCase functions to lowerCamelCase. * Remove global (!) semaphore count mutex on OSX. * Remove semaphore count getter (unused, unsafe, depended on internal API functions on Windows, and used a hack on OSX). * Add `Atomic<type>`. * Make `Thread` handle thread names. * Add support for C++11 multi-threading. * Combine pthread and win32 sources. * Remove `ThreadStarted` (unused, unneeded). * Move some includes from the headers to the sources. * Move all of `Event` into its header (allows inlining with no new includes). * Make `Event` use `Semaphore` (except on Windows). * Move some porting functions into `Thread`. * Integrate logging with `Thread`. * Add threading test.
Diffstat (limited to 'src/jthread')
-rw-r--r--src/jthread/CMakeLists.txt14
-rw-r--r--src/jthread/LICENSE.MIT20
-rw-r--r--src/jthread/jevent.h59
-rw-r--r--src/jthread/jmutex.h79
-rw-r--r--src/jthread/jmutexautolock.h43
-rw-r--r--src/jthread/jsemaphore.h64
-rw-r--r--src/jthread/jthread.h117
-rw-r--r--src/jthread/pthread/jevent.cpp67
-rw-r--r--src/jthread/pthread/jmutex.cpp58
-rw-r--r--src/jthread/pthread/jsemaphore.cpp156
-rw-r--r--src/jthread/pthread/jthread.cpp168
-rw-r--r--src/jthread/win32/jevent.cpp43
-rw-r--r--src/jthread/win32/jmutex.cpp68
-rw-r--r--src/jthread/win32/jsemaphore.cpp104
-rwxr-xr-xsrc/jthread/win32/jthread.cpp146
15 files changed, 0 insertions, 1206 deletions
diff --git a/src/jthread/CMakeLists.txt b/src/jthread/CMakeLists.txt
deleted file mode 100644
index cebb35caa..000000000
--- a/src/jthread/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-if(UNIX)
- set(THREAD_SYS_DIR pthread)
-else()
- set(THREAD_SYS_DIR win32)
-endif()
-
-set(SRC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/${THREAD_SYS_DIR})
-set(JTHREAD_SRCS
- ${SRC_PREFIX}/jmutex.cpp
- ${SRC_PREFIX}/jthread.cpp
- ${SRC_PREFIX}/jsemaphore.cpp
- ${SRC_PREFIX}/jevent.cpp
- PARENT_SCOPE)
-
diff --git a/src/jthread/LICENSE.MIT b/src/jthread/LICENSE.MIT
deleted file mode 100644
index 2aa4fd57b..000000000
--- a/src/jthread/LICENSE.MIT
+++ /dev/null
@@ -1,20 +0,0 @@
-The license of JThread:
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
-
diff --git a/src/jthread/jevent.h b/src/jthread/jevent.h
deleted file mode 100644
index 9ea7ebde8..000000000
--- a/src/jthread/jevent.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JEVENT_H_
-#define JEVENT_H_
-
-#ifdef _WIN32
-#include <windows.h>
-#elif defined(__MACH__) && defined(__APPLE__)
-#include <mach/mach.h>
-#include <mach/task.h>
-#include <mach/semaphore.h>
-#include <sys/semaphore.h>
-#else
-#include <semaphore.h>
-#endif
-
-
-class Event {
-#ifdef _WIN32
- HANDLE hEvent;
-#elif defined(__MACH__) && defined(__APPLE__)
- semaphore_t sem;
-#else
- sem_t sem;
-#endif
-
-public:
- Event();
- ~Event();
- void wait();
- void signal();
-};
-
-#endif /* JEVENT_H_ */
diff --git a/src/jthread/jmutex.h b/src/jthread/jmutex.h
deleted file mode 100644
index e57cd8a43..000000000
--- a/src/jthread/jmutex.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JMUTEX_H
-
-#define JMUTEX_H
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
- #ifndef _WIN32_WINNT
- #define _WIN32_WINNT 0x0501
- #endif
- #ifndef _WIN32_WCE
- #include <process.h>
- #endif // _WIN32_WCE
- #include <winsock2.h>
- #include <windows.h>
- // CriticalSection is way faster than the alternative
- #define JMUTEX_CRITICALSECTION
-#else // using pthread
- #include <pthread.h>
-#endif // WIN32
-
-#define ERR_JMUTEX_ALREADYINIT -1
-#define ERR_JMUTEX_NOTINIT -2
-#define ERR_JMUTEX_CANTCREATEMUTEX -3
-
-class JMutex
-{
-public:
- JMutex();
- ~JMutex();
- int Lock();
- int Unlock();
-
-private:
-#if (defined(WIN32) || defined(_WIN32_WCE))
-#ifdef JMUTEX_CRITICALSECTION
- CRITICAL_SECTION mutex;
-#else // Use standard mutex
- HANDLE mutex;
-#endif // JMUTEX_CRITICALSECTION
-#else // pthread mutex
- pthread_mutex_t mutex;
-
- bool IsLocked() {
- if (pthread_mutex_trylock(&mutex)) {
- pthread_mutex_unlock(&mutex);
- return true;
- }
- return false;
- }
-#endif // WIN32
-};
-
-#endif // JMUTEX_H
diff --git a/src/jthread/jmutexautolock.h b/src/jthread/jmutexautolock.h
deleted file mode 100644
index 6020a5c33..000000000
--- a/src/jthread/jmutexautolock.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JMUTEXAUTOLOCK_H
-
-#define JMUTEXAUTOLOCK_H
-
-#include "jmutex.h"
-
-class JMutexAutoLock
-{
-public:
- JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); }
- ~JMutexAutoLock() { mutex.Unlock(); }
-private:
- JMutex &mutex;
-};
-
-#endif // JMUTEXAUTOLOCK_H
diff --git a/src/jthread/jsemaphore.h b/src/jthread/jsemaphore.h
deleted file mode 100644
index 32e9bc2f2..000000000
--- a/src/jthread/jsemaphore.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT net >
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#ifndef JSEMAPHORE_H_
-#define JSEMAPHORE_H_
-
-#if defined(WIN32)
-#include <windows.h>
-#include <assert.h>
-#define MAX_SEMAPHORE_COUNT 1024
-#elif defined(__MACH__) && defined(__APPLE__)
-#include <pthread.h>
-#include <mach/mach.h>
-#include <mach/task.h>
-#include <mach/semaphore.h>
-#include <sys/semaphore.h>
-#include <errno.h>
-#include <time.h>
-#else
-#include <pthread.h>
-#include <semaphore.h>
-#endif
-
-class JSemaphore {
-public:
- JSemaphore();
- ~JSemaphore();
- JSemaphore(int initval);
-
- void Post();
- void Wait();
- bool Wait(unsigned int time_ms);
-
- int GetValue();
-
-private:
-#if defined(WIN32)
- HANDLE m_hSemaphore;
-#elif defined(__MACH__) && defined(__APPLE__)
- semaphore_t m_semaphore;
- int semcount;
-#else
- sem_t m_semaphore;
-#endif
-};
-
-
-#endif /* JSEMAPHORE_H_ */
diff --git a/src/jthread/jthread.h b/src/jthread/jthread.h
deleted file mode 100644
index 89743a3e3..000000000
--- a/src/jthread/jthread.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JTHREAD_H
-#define JTHREAD_H
-
-#if __cplusplus >= 201103L
-#include <atomic>
-#endif
-
-#include "jthread/jmutex.h"
-
-#define ERR_JTHREAD_CANTINITMUTEX -1
-#define ERR_JTHREAD_CANTSTARTTHREAD -2
-#define ERR_JTHREAD_THREADFUNCNOTSET -3
-#define ERR_JTHREAD_NOTRUNNING -4
-#define ERR_JTHREAD_ALREADYRUNNING -5
-
-class JThread
-{
-public:
- JThread();
- virtual ~JThread();
- int Start();
- inline void Stop()
- { requeststop = true; }
- int Kill();
- virtual void *Thread() = 0;
- inline bool IsRunning()
- { return running; }
- inline bool StopRequested()
- { return requeststop; }
- void *GetReturnValue();
- bool IsSameThread();
-
- /*
- * Wait for thread to finish
- * Note: this does not stop a thread you have to do this on your own
- * WARNING: never ever call this on a thread not started or already killed!
- */
- void Wait();
-protected:
- void ThreadStarted();
-private:
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
-#ifdef _WIN32_WCE
- DWORD threadid;
- static DWORD WINAPI TheThread(void *param);
-#else
- static UINT __stdcall TheThread(void *param);
- UINT threadid;
-#endif // _WIN32_WCE
- HANDLE threadhandle;
-#else // pthread type threads
- static void *TheThread(void *param);
-
- pthread_t threadid;
-
- /*
- * reading and writing bool values is atomic on all relevant architectures
- * ( x86 + arm ). No need to waste time for locking here.
- * once C++11 is supported we can tell compiler to handle cpu caches correct
- * too. This should cause additional improvement (and silence thread
- * concurrency check tools.
- */
-#if __cplusplus >= 201103L
- std::atomic_bool started;
-#else
- bool started;
-#endif
-#endif // WIN32
- void *retval;
- /*
- * reading and writing bool values is atomic on all relevant architectures
- * ( x86 + arm ). No need to waste time for locking here.
- * once C++11 is supported we can tell compiler to handle cpu caches correct
- * too. This should cause additional improvement (and silence thread
- * concurrency check tools.
- */
-#if __cplusplus >= 201103L
- std::atomic_bool running;
- std::atomic_bool requeststop;
-#else
- bool running;
- bool requeststop;
-#endif
-
- JMutex continuemutex,continuemutex2;
-};
-
-#endif // JTHREAD_H
-
diff --git a/src/jthread/pthread/jevent.cpp b/src/jthread/pthread/jevent.cpp
deleted file mode 100644
index e1d40f4c1..000000000
--- a/src/jthread/pthread/jevent.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jevent.h"
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if defined(__MACH__) && defined(__APPLE__)
-#undef sem_t
-#define sem_t semaphore_t
-#undef sem_init
-#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c))
-#undef sem_wait
-#define sem_wait(s) semaphore_wait(*(s))
-#undef sem_post
-#define sem_post(s) semaphore_signal(*(s))
-#undef sem_destroy
-#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s))
-#endif
-
-Event::Event() {
- int sem_init_retval = sem_init(&sem, 0, 0);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-}
-
-Event::~Event() {
- int sem_destroy_retval = sem_destroy(&sem);
- assert(sem_destroy_retval == 0);
- UNUSED(sem_destroy_retval);
-}
-
-void Event::wait() {
- int sem_wait_retval = sem_wait(&sem);
- assert(sem_wait_retval == 0);
- UNUSED(sem_wait_retval);
-}
-
-void Event::signal() {
- int sem_post_retval = sem_post(&sem);
- assert(sem_post_retval == 0);
- UNUSED(sem_post_retval);
-}
diff --git a/src/jthread/pthread/jmutex.cpp b/src/jthread/pthread/jmutex.cpp
deleted file mode 100644
index 0551b9728..000000000
--- a/src/jthread/pthread/jmutex.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jmutex.h"
-#define UNUSED(expr) do { (void)(expr); } while (0)
-JMutex::JMutex()
-{
- int mutex_init_retval = pthread_mutex_init(&mutex,NULL);
- assert( mutex_init_retval == 0 );
- UNUSED(mutex_init_retval);
-}
-
-JMutex::~JMutex()
-{
- int mutex_dextroy_retval = pthread_mutex_destroy(&mutex);
- assert( mutex_dextroy_retval == 0 );
- UNUSED(mutex_dextroy_retval);
-}
-
-int JMutex::Lock()
-{
- int mutex_lock_retval = pthread_mutex_lock(&mutex);
- assert( mutex_lock_retval == 0 );
- return mutex_lock_retval;
- UNUSED(mutex_lock_retval);
-}
-
-int JMutex::Unlock()
-{
- int mutex_unlock_retval = pthread_mutex_unlock(&mutex);
- assert( mutex_unlock_retval == 0 );
- return mutex_unlock_retval;
- UNUSED(mutex_unlock_retval);
-}
diff --git a/src/jthread/pthread/jsemaphore.cpp b/src/jthread/pthread/jsemaphore.cpp
deleted file mode 100644
index 15281ba64..000000000
--- a/src/jthread/pthread/jsemaphore.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT net >
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include "jthread/jsemaphore.h"
-#if defined(__MACH__) && defined(__APPLE__)
-#include <unistd.h>
-#endif
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if defined(__MACH__) && defined(__APPLE__)
-#undef sem_t
-#undef sem_init
-#undef sem_wait
-#undef sem_post
-#undef sem_destroy
-#define sem_t semaphore_t
-#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c))
-#define sem_wait(s) semaphore_wait(*(s))
-#define sem_post(s) semaphore_signal(*(s))
-#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s))
-pthread_mutex_t semcount_mutex;
-#endif
-
-JSemaphore::JSemaphore() {
- int sem_init_retval = sem_init(&m_semaphore,0,0);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- semcount = 0;
-#endif
-}
-
-JSemaphore::~JSemaphore() {
- int sem_destroy_retval = sem_destroy(&m_semaphore);
-#ifdef __ANDROID__
-// WORKAROUND for broken bionic semaphore implementation!
- assert(
- (sem_destroy_retval == 0) ||
- (errno == EBUSY)
- );
-#else
- assert(sem_destroy_retval == 0);
-#endif
- UNUSED(sem_destroy_retval);
-}
-
-JSemaphore::JSemaphore(int initval) {
- int sem_init_retval = sem_init(&m_semaphore,0,initval);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-}
-
-void JSemaphore::Post() {
- int sem_post_retval = sem_post(&m_semaphore);
- assert(sem_post_retval == 0);
- UNUSED(sem_post_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount++;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
-}
-
-void JSemaphore::Wait() {
- int sem_wait_retval = sem_wait(&m_semaphore);
- assert(sem_wait_retval == 0);
- UNUSED(sem_wait_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount--;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
-}
-
-bool JSemaphore::Wait(unsigned int time_ms) {
-#if defined(__MACH__) && defined(__APPLE__)
- mach_timespec_t waittime;
- waittime.tv_sec = time_ms / 1000;
- waittime.tv_nsec = 1000000 * (time_ms % 1000);
-#else
- struct timespec waittime;
-#endif
- struct timeval now;
-
- if (gettimeofday(&now, NULL) == -1) {
- assert("Unable to get time by clock_gettime!" == 0);
- return false;
- }
-
-#if !(defined(__MACH__) && defined(__APPLE__))
- waittime.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000);
- waittime.tv_sec = (time_ms / 1000) + (waittime.tv_nsec / (1000*1000*1000)) + now.tv_sec;
- waittime.tv_nsec %= 1000*1000*1000;
-#endif
-
- errno = 0;
-#if defined(__MACH__) && defined(__APPLE__)
- int sem_wait_retval = semaphore_timedwait(m_semaphore, waittime);
- if (sem_wait_retval == KERN_OPERATION_TIMED_OUT) {
- errno = ETIMEDOUT;
- } else if (sem_wait_retval == KERN_ABORTED) {
- errno = EINTR;
- } else if (sem_wait_retval != 0) {
- errno = EINVAL;
- }
-#else
- int sem_wait_retval = sem_timedwait(&m_semaphore, &waittime);
-#endif
-
- if (sem_wait_retval == 0)
- {
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount--;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
- return true;
- }
- else {
- assert((errno == ETIMEDOUT) || (errno == EINTR));
- return false;
- }
- return sem_wait_retval == 0 ? true : false;
-}
-
-int JSemaphore::GetValue() {
- int retval = 0;
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- retval = semcount;
- pthread_mutex_unlock(&semcount_mutex);
-#else
- sem_getvalue(&m_semaphore, &retval);
-#endif
- return retval;
-}
-
diff --git a/src/jthread/pthread/jthread.cpp b/src/jthread/pthread/jthread.cpp
deleted file mode 100644
index 414d8fde5..000000000
--- a/src/jthread/pthread/jthread.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#include "jthread/jthread.h"
-#include <assert.h>
-#include <sys/time.h>
-#include <time.h>
-#include <stdlib.h>
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-JThread::JThread()
-{
- retval = NULL;
- requeststop = false;
- running = false;
- started = false;
-}
-
-JThread::~JThread()
-{
- Kill();
-}
-
-void JThread::Wait() {
- void* status;
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
-}
-
-int JThread::Start()
-{
- int status;
-
- if (running)
- {
- return ERR_JTHREAD_ALREADYRUNNING;
- }
- requeststop = false;
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
-
- continuemutex.Lock();
- status = pthread_create(&threadid,&attr,TheThread,this);
- pthread_attr_destroy(&attr);
- if (status != 0)
- {
- continuemutex.Unlock();
- return ERR_JTHREAD_CANTSTARTTHREAD;
- }
-
- /* Wait until 'running' is set */
-
- while (!running)
- {
- struct timespec req,rem;
-
- req.tv_sec = 0;
- req.tv_nsec = 1000000;
- nanosleep(&req,&rem);
- }
- started = true;
-
- continuemutex.Unlock();
-
- continuemutex2.Lock();
- continuemutex2.Unlock();
- return 0;
-}
-
-int JThread::Kill()
-{
- void* status;
- if (!running)
- {
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
- return ERR_JTHREAD_NOTRUNNING;
- }
-#ifdef __ANDROID__
- pthread_kill(threadid, SIGKILL);
-#else
- pthread_cancel(threadid);
-#endif
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
- running = false;
- return 0;
-}
-
-void *JThread::GetReturnValue()
-{
- void *val;
-
- if (running) {
- val = NULL;
- } else {
- val = retval;
- }
-
- return val;
-}
-
-bool JThread::IsSameThread()
-{
- return pthread_equal(pthread_self(), threadid);
-}
-
-void *JThread::TheThread(void *param)
-{
- JThread *jthread = (JThread *)param;
-
- jthread->continuemutex2.Lock();
- jthread->running = true;
-
- jthread->continuemutex.Lock();
- jthread->continuemutex.Unlock();
-
- jthread->Thread();
-
- jthread->running = false;
-
- return NULL;
-}
-
-void JThread::ThreadStarted()
-{
- continuemutex2.Unlock();
-}
-
diff --git a/src/jthread/win32/jevent.cpp b/src/jthread/win32/jevent.cpp
deleted file mode 100644
index 67b468f01..000000000
--- a/src/jthread/win32/jevent.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include "jthread/jevent.h"
-
-Event::Event() {
- hEvent = CreateEvent(NULL, 0, 0, NULL);
-}
-
-Event::~Event() {
- CloseHandle(hEvent);
-}
-
-void Event::wait() {
- WaitForSingleObject(hEvent, INFINITE);
-}
-
-void Event::signal() {
- SetEvent(hEvent);
-}
diff --git a/src/jthread/win32/jmutex.cpp b/src/jthread/win32/jmutex.cpp
deleted file mode 100644
index b9f5e0e73..000000000
--- a/src/jthread/win32/jmutex.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jmutex.h"
-
-JMutex::JMutex()
-{
-#ifdef JMUTEX_CRITICALSECTION
- InitializeCriticalSection(&mutex);
-#else
- mutex = CreateMutex(NULL,FALSE,NULL);
- assert(mutex != NULL);
-#endif // JMUTEX_CRITICALSECTION
-}
-
-JMutex::~JMutex()
-{
-#ifdef JMUTEX_CRITICALSECTION
- DeleteCriticalSection(&mutex);
-#else
- CloseHandle(mutex);
-#endif // JMUTEX_CRITICALSECTION
-}
-
-int JMutex::Lock()
-{
-#ifdef JMUTEX_CRITICALSECTION
- EnterCriticalSection(&mutex);
-#else
- WaitForSingleObject(mutex,INFINITE);
-#endif // JMUTEX_CRITICALSECTION
- return 0;
-}
-
-int JMutex::Unlock()
-{
-#ifdef JMUTEX_CRITICALSECTION
- LeaveCriticalSection(&mutex);
-#else
- ReleaseMutex(mutex);
-#endif // JMUTEX_CRITICALSECTION
- return 0;
-}
-
diff --git a/src/jthread/win32/jsemaphore.cpp b/src/jthread/win32/jsemaphore.cpp
deleted file mode 100644
index 27a11e819..000000000
--- a/src/jthread/win32/jsemaphore.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT net >
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include "jthread/jsemaphore.h"
-
-JSemaphore::JSemaphore() {
- m_hSemaphore = CreateSemaphore(
- 0,
- 0,
- MAX_SEMAPHORE_COUNT,
- 0);
-}
-
-JSemaphore::~JSemaphore() {
- CloseHandle(m_hSemaphore);
-}
-
-JSemaphore::JSemaphore(int initval) {
- m_hSemaphore = CreateSemaphore(
- 0,
- initval,
- MAX_SEMAPHORE_COUNT,
- 0);
-}
-
-void JSemaphore::Post() {
- ReleaseSemaphore(
- m_hSemaphore,
- 1,
- 0);
-}
-
-void JSemaphore::Wait() {
- WaitForSingleObject(
- m_hSemaphore,
- INFINITE);
-}
-
-bool JSemaphore::Wait(unsigned int time_ms) {
- unsigned int retval = WaitForSingleObject(
- m_hSemaphore,
- time_ms);
-
- if (retval == WAIT_OBJECT_0)
- {
- return true;
- }
- else {
- assert(retval == WAIT_TIMEOUT);
- return false;
- }
-}
-
-typedef LONG (NTAPI *_NtQuerySemaphore)(
- HANDLE SemaphoreHandle,
- DWORD SemaphoreInformationClass,
- PVOID SemaphoreInformation,
- ULONG SemaphoreInformationLength,
- PULONG ReturnLength OPTIONAL
-);
-
-typedef struct _SEMAPHORE_BASIC_INFORMATION {
- ULONG CurrentCount;
- ULONG MaximumCount;
-} SEMAPHORE_BASIC_INFORMATION;
-
-/* Note: this will only work as long as jthread is directly linked to application */
-/* it's gonna fail if someone tries to build jthread as dll */
-static _NtQuerySemaphore NtQuerySemaphore =
- (_NtQuerySemaphore)
- GetProcAddress
- (GetModuleHandle ("ntdll.dll"), "NtQuerySemaphore");
-
-int JSemaphore::GetValue() {
- SEMAPHORE_BASIC_INFORMATION BasicInfo;
- LONG retval;
-
- assert(NtQuerySemaphore);
-
- retval = NtQuerySemaphore (m_hSemaphore, 0,
- &BasicInfo, sizeof (SEMAPHORE_BASIC_INFORMATION), NULL);
-
- if (retval == ERROR_SUCCESS)
- return BasicInfo.CurrentCount;
-
- assert("unable to read semaphore count" == 0);
- return 0;
-}
-
diff --git a/src/jthread/win32/jthread.cpp b/src/jthread/win32/jthread.cpp
deleted file mode 100755
index b523d664c..000000000
--- a/src/jthread/win32/jthread.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#include "jthread/jthread.h"
-#include <assert.h>
-#define UNUSED(expr) do { (void)(expr); } while (0)
-#ifndef _WIN32_WCE
- #include <process.h>
-#endif // _WIN32_WCE
-
-JThread::JThread()
-{
- retval = NULL;
- requeststop = false;
- running = false;
-}
-
-JThread::~JThread()
-{
- Kill();
-}
-
-void JThread::Wait() {
- if (running)
- {
- WaitForSingleObject(threadhandle, INFINITE);
- }
-}
-
-int JThread::Start()
-{
- if (running)
- {
- return ERR_JTHREAD_ALREADYRUNNING;
- }
- requeststop = false;
-
- continuemutex.Lock();
-#ifndef _WIN32_WCE
- threadhandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,&threadid);
-#else
- threadhandle = CreateThread(NULL,0,TheThread,this,0,&threadid);
-#endif // _WIN32_WCE
- if (threadhandle == NULL)
- {
- continuemutex.Unlock();
- return ERR_JTHREAD_CANTSTARTTHREAD;
- }
-
- /* Wait until 'running' is set */
- while (!running)
- {
- Sleep(1);
- }
-
- continuemutex.Unlock();
-
- continuemutex2.Lock();
- continuemutex2.Unlock();
-
- return 0;
-}
-
-int JThread::Kill()
-{
- if (!running)
- {
- return ERR_JTHREAD_NOTRUNNING;
- }
- TerminateThread(threadhandle,0);
- CloseHandle(threadhandle);
- running = false;
- return 0;
-}
-
-void *JThread::GetReturnValue()
-{
- void *val;
-
- if (running) {
- val = NULL;
- } else {
- val = retval;
- }
- return val;
-}
-
-bool JThread::IsSameThread()
-{
- return GetCurrentThreadId() == threadid;
-}
-
-#ifndef _WIN32_WCE
-UINT __stdcall JThread::TheThread(void *param)
-#else
-DWORD WINAPI JThread::TheThread(void *param)
-#endif // _WIN32_WCE
-{
- JThread *jthread;
- void *ret;
-
- jthread = (JThread *)param;
-
- jthread->continuemutex2.Lock();
- jthread->running = true;
-
- jthread->continuemutex.Lock();
- jthread->continuemutex.Unlock();
-
- ret = jthread->Thread();
-
- jthread->running = false;
- jthread->retval = ret;
- CloseHandle(jthread->threadhandle);
- return 0;
-}
-
-void JThread::ThreadStarted()
-{
- continuemutex2.Unlock();
-}
-