aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/zstd/common/threading.c
diff options
context:
space:
mode:
authorFerenc Arn2017-06-08 20:43:56 -0500
committerFerenc Arn2017-06-08 23:48:14 -0500
commitf177c1534757973063f244450df063def879d7db (patch)
treef92cf1c822d71acfe5e56ea42b80018abe0e0117 /thirdparty/zstd/common/threading.c
parent01ed55987c4c044191e50ecc94c277b97962ffc7 (diff)
downloadgodot-f177c1534757973063f244450df063def879d7db.tar.gz
godot-f177c1534757973063f244450df063def879d7db.tar.zst
godot-f177c1534757973063f244450df063def879d7db.zip
Add zstd compression support.
zstd has much better compression speed and ratio, and better decompression speed than currently available methods. Also set zstd as the default compression method for Compression as well as FileAccessCompressed functions.
Diffstat (limited to 'thirdparty/zstd/common/threading.c')
-rw-r--r--thirdparty/zstd/common/threading.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/thirdparty/zstd/common/threading.c b/thirdparty/zstd/common/threading.c
new file mode 100644
index 000000000..32d58796a
--- /dev/null
+++ b/thirdparty/zstd/common/threading.c
@@ -0,0 +1,80 @@
+
+/**
+ * Copyright (c) 2016 Tino Reichardt
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * You can contact the author at:
+ * - zstdmt source repository: https://github.com/mcmilk/zstdmt
+ */
+
+/**
+ * This file will hold wrapper for systems, which do not support pthreads
+ */
+
+/* When ZSTD_MULTITHREAD is not defined, this file would become an empty translation unit.
+* Include some ISO C header code to prevent this and portably avoid related warnings.
+* (Visual C++: C4206 / GCC: -Wpedantic / Clang: -Wempty-translation-unit)
+*/
+#include <stddef.h>
+
+
+#if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
+
+/**
+ * Windows minimalist Pthread Wrapper, based on :
+ * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
+ */
+
+
+/* === Dependencies === */
+#include <process.h>
+#include <errno.h>
+#include "threading.h"
+
+
+/* === Implementation === */
+
+static unsigned __stdcall worker(void *arg)
+{
+ pthread_t* const thread = (pthread_t*) arg;
+ thread->arg = thread->start_routine(thread->arg);
+ return 0;
+}
+
+int pthread_create(pthread_t* thread, const void* unused,
+ void* (*start_routine) (void*), void* arg)
+{
+ (void)unused;
+ thread->arg = arg;
+ thread->start_routine = start_routine;
+ thread->handle = (HANDLE) _beginthreadex(NULL, 0, worker, thread, 0, NULL);
+
+ if (!thread->handle)
+ return errno;
+ else
+ return 0;
+}
+
+int _pthread_join(pthread_t * thread, void **value_ptr)
+{
+ DWORD result;
+
+ if (!thread->handle) return 0;
+
+ result = WaitForSingleObject(thread->handle, INFINITE);
+ switch (result) {
+ case WAIT_OBJECT_0:
+ if (value_ptr) *value_ptr = thread->arg;
+ return 0;
+ case WAIT_ABANDONED:
+ return EINVAL;
+ default:
+ return GetLastError();
+ }
+}
+
+#endif /* ZSTD_MULTITHREAD */