comparison contrib/python-zstandard/zstd/common/threading.h @ 37495:b1fb341d8a61

zstandard: vendor python-zstandard 0.9.0 This was just released. It features a number of goodies. More info at https://gregoryszorc.com/blog/2018/04/09/release-of-python-zstandard-0.9/. The clang-format ignore list was updated to reflect the new source of files. The project contains a vendored copy of zstandard 1.3.4. The old version was 1.1.3. One of the changes between those versions is that zstandard is now dual licensed BSD + GPLv2 and the patent rights grant has been removed. Good riddance. The API should be backwards compatible. So no changes in core should be needed. However, there were a number of changes in the library that we'll want to adapt to. Those will be addressed in subsequent commits. Differential Revision: https://phab.mercurial-scm.org/D3198
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 09 Apr 2018 10:13:29 -0700
parents c32454d69b85
children de7838053207
comparison
equal deleted inserted replaced
37494:1ce7a55b09d1 37495:b1fb341d8a61
1
2 /** 1 /**
3 * Copyright (c) 2016 Tino Reichardt 2 * Copyright (c) 2016 Tino Reichardt
4 * All rights reserved. 3 * All rights reserved.
5 * 4 *
6 * This source code is licensed under the BSD-style license found in the 5 * This source code is licensed under both the BSD-style license (found in the
7 * LICENSE file in the root directory of this source tree. An additional grant 6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
8 * of patent rights can be found in the PATENTS file in the same directory. 7 * in the COPYING file in the root directory of this source tree).
9 * 8 *
10 * You can contact the author at: 9 * You can contact the author at:
11 * - zstdmt source repository: https://github.com/mcmilk/zstdmt 10 * - zstdmt source repository: https://github.com/mcmilk/zstdmt
12 */ 11 */
13 12
36 35
37 #ifndef WIN32_LEAN_AND_MEAN 36 #ifndef WIN32_LEAN_AND_MEAN
38 # define WIN32_LEAN_AND_MEAN 37 # define WIN32_LEAN_AND_MEAN
39 #endif 38 #endif
40 39
40 #undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
41 #include <windows.h> 41 #include <windows.h>
42 #undef ERROR
43 #define ERROR(name) ZSTD_ERROR(name)
44
42 45
43 /* mutex */ 46 /* mutex */
44 #define pthread_mutex_t CRITICAL_SECTION 47 #define ZSTD_pthread_mutex_t CRITICAL_SECTION
45 #define pthread_mutex_init(a,b) InitializeCriticalSection((a)) 48 #define ZSTD_pthread_mutex_init(a, b) ((void)(b), InitializeCriticalSection((a)), 0)
46 #define pthread_mutex_destroy(a) DeleteCriticalSection((a)) 49 #define ZSTD_pthread_mutex_destroy(a) DeleteCriticalSection((a))
47 #define pthread_mutex_lock(a) EnterCriticalSection((a)) 50 #define ZSTD_pthread_mutex_lock(a) EnterCriticalSection((a))
48 #define pthread_mutex_unlock(a) LeaveCriticalSection((a)) 51 #define ZSTD_pthread_mutex_unlock(a) LeaveCriticalSection((a))
49 52
50 /* condition variable */ 53 /* condition variable */
51 #define pthread_cond_t CONDITION_VARIABLE 54 #define ZSTD_pthread_cond_t CONDITION_VARIABLE
52 #define pthread_cond_init(a, b) InitializeConditionVariable((a)) 55 #define ZSTD_pthread_cond_init(a, b) ((void)(b), InitializeConditionVariable((a)), 0)
53 #define pthread_cond_destroy(a) /* No delete */ 56 #define ZSTD_pthread_cond_destroy(a) ((void)(a))
54 #define pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE) 57 #define ZSTD_pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE)
55 #define pthread_cond_signal(a) WakeConditionVariable((a)) 58 #define ZSTD_pthread_cond_signal(a) WakeConditionVariable((a))
56 #define pthread_cond_broadcast(a) WakeAllConditionVariable((a)) 59 #define ZSTD_pthread_cond_broadcast(a) WakeAllConditionVariable((a))
57 60
58 /* pthread_create() and pthread_join() */ 61 /* ZSTD_pthread_create() and ZSTD_pthread_join() */
59 typedef struct { 62 typedef struct {
60 HANDLE handle; 63 HANDLE handle;
61 void* (*start_routine)(void*); 64 void* (*start_routine)(void*);
62 void* arg; 65 void* arg;
63 } pthread_t; 66 } ZSTD_pthread_t;
64 67
65 int pthread_create(pthread_t* thread, const void* unused, 68 int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused,
66 void* (*start_routine) (void*), void* arg); 69 void* (*start_routine) (void*), void* arg);
67 70
68 #define pthread_join(a, b) _pthread_join(&(a), (b)) 71 int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr);
69 int _pthread_join(pthread_t* thread, void** value_ptr);
70 72
71 /** 73 /**
72 * add here more wrappers as required 74 * add here more wrappers as required
73 */ 75 */
74 76
75 77
76 #elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection mathod */ 78 #elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */
77 /* === POSIX Systems === */ 79 /* === POSIX Systems === */
78 # include <pthread.h> 80 # include <pthread.h>
81
82 #define ZSTD_pthread_mutex_t pthread_mutex_t
83 #define ZSTD_pthread_mutex_init(a, b) pthread_mutex_init((a), (b))
84 #define ZSTD_pthread_mutex_destroy(a) pthread_mutex_destroy((a))
85 #define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock((a))
86 #define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock((a))
87
88 #define ZSTD_pthread_cond_t pthread_cond_t
89 #define ZSTD_pthread_cond_init(a, b) pthread_cond_init((a), (b))
90 #define ZSTD_pthread_cond_destroy(a) pthread_cond_destroy((a))
91 #define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait((a), (b))
92 #define ZSTD_pthread_cond_signal(a) pthread_cond_signal((a))
93 #define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast((a))
94
95 #define ZSTD_pthread_t pthread_t
96 #define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d))
97 #define ZSTD_pthread_join(a, b) pthread_join((a),(b))
79 98
80 #else /* ZSTD_MULTITHREAD not defined */ 99 #else /* ZSTD_MULTITHREAD not defined */
81 /* No multithreading support */ 100 /* No multithreading support */
82 101
83 #define pthread_mutex_t int /* #define rather than typedef, as sometimes pthread support is implicit, resulting in duplicated symbols */ 102 typedef int ZSTD_pthread_mutex_t;
84 #define pthread_mutex_init(a,b) 103 #define ZSTD_pthread_mutex_init(a, b) ((void)(a), (void)(b), 0)
85 #define pthread_mutex_destroy(a) 104 #define ZSTD_pthread_mutex_destroy(a) ((void)(a))
86 #define pthread_mutex_lock(a) 105 #define ZSTD_pthread_mutex_lock(a) ((void)(a))
87 #define pthread_mutex_unlock(a) 106 #define ZSTD_pthread_mutex_unlock(a) ((void)(a))
88 107
89 #define pthread_cond_t int 108 typedef int ZSTD_pthread_cond_t;
90 #define pthread_cond_init(a,b) 109 #define ZSTD_pthread_cond_init(a, b) ((void)(a), (void)(b), 0)
91 #define pthread_cond_destroy(a) 110 #define ZSTD_pthread_cond_destroy(a) ((void)(a))
92 #define pthread_cond_wait(a,b) 111 #define ZSTD_pthread_cond_wait(a, b) ((void)(a), (void)(b))
93 #define pthread_cond_signal(a) 112 #define ZSTD_pthread_cond_signal(a) ((void)(a))
94 #define pthread_cond_broadcast(a) 113 #define ZSTD_pthread_cond_broadcast(a) ((void)(a))
95 114
96 /* do not use pthread_t */ 115 /* do not use ZSTD_pthread_t */
97 116
98 #endif /* ZSTD_MULTITHREAD */ 117 #endif /* ZSTD_MULTITHREAD */
99 118
100 #if defined (__cplusplus) 119 #if defined (__cplusplus)
101 } 120 }