##// END OF EJS Templates
revlog: introduce an explicit tracking of what the revlog is about...
revlog: introduce an explicit tracking of what the revlog is about Since the dawn of time, people have been forced to rely to lossy introspection of the index filename to determine what the purpose and role of the revlog they encounter is. This is hacky, error prone, inflexible, abstraction-leaky, <insert-your-own-complaints-here>. In f63299ee7e4d Raphaël introduced a new attribute to track this information: `revlog_kind`. However it is initialized in an odd place and various instances end up not having it set. In addition is only tracking some of the information we end up having to introspect in various pieces of code. So we add a new attribute that holds more data and is more strictly enforced. This work is done in collaboration with Raphaël. The `revlog_kind` one will be removed/adapted in the next changeset. We expect to be able to clean up various existing piece of code and to simplify coming work around the newer revlog format. Differential Revision: https://phab.mercurial-scm.org/D10352

File last commit:

r44446:de783805 default
r47838:4c041c71 default
Show More
threading.h
154 lines | 5.2 KiB | text/x-c | CLexer
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 /**
* Copyright (c) 2016 Tino Reichardt
* All rights reserved.
*
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 * This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 *
* You can contact the author at:
* - zstdmt source repository: https://github.com/mcmilk/zstdmt
*/
#ifndef THREADING_H_938743
#define THREADING_H_938743
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 #include "debug.h"
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 #if defined (__cplusplus)
extern "C" {
#endif
#if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
/**
* Windows minimalist Pthread Wrapper, based on :
* http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
*/
#ifdef WINVER
# undef WINVER
#endif
#define WINVER 0x0600
#ifdef _WIN32_WINNT
# undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0600
#ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
#endif
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 #undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 #include <windows.h>
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 #undef ERROR
#define ERROR(name) ZSTD_ERROR(name)
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
/* mutex */
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 #define ZSTD_pthread_mutex_t CRITICAL_SECTION
#define ZSTD_pthread_mutex_init(a, b) ((void)(b), InitializeCriticalSection((a)), 0)
#define ZSTD_pthread_mutex_destroy(a) DeleteCriticalSection((a))
#define ZSTD_pthread_mutex_lock(a) EnterCriticalSection((a))
#define ZSTD_pthread_mutex_unlock(a) LeaveCriticalSection((a))
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
/* condition variable */
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 #define ZSTD_pthread_cond_t CONDITION_VARIABLE
#define ZSTD_pthread_cond_init(a, b) ((void)(b), InitializeConditionVariable((a)), 0)
#define ZSTD_pthread_cond_destroy(a) ((void)(a))
#define ZSTD_pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE)
#define ZSTD_pthread_cond_signal(a) WakeConditionVariable((a))
#define ZSTD_pthread_cond_broadcast(a) WakeAllConditionVariable((a))
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 /* ZSTD_pthread_create() and ZSTD_pthread_join() */
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 typedef struct {
HANDLE handle;
void* (*start_routine)(void*);
void* arg;
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 } ZSTD_pthread_t;
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused,
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 void* (*start_routine) (void*), void* arg);
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr);
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
/**
* add here more wrappers as required
*/
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 #elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 /* === POSIX Systems === */
# include <pthread.h>
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 #if DEBUGLEVEL < 1
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 #define ZSTD_pthread_mutex_t pthread_mutex_t
#define ZSTD_pthread_mutex_init(a, b) pthread_mutex_init((a), (b))
#define ZSTD_pthread_mutex_destroy(a) pthread_mutex_destroy((a))
#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock((a))
#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock((a))
#define ZSTD_pthread_cond_t pthread_cond_t
#define ZSTD_pthread_cond_init(a, b) pthread_cond_init((a), (b))
#define ZSTD_pthread_cond_destroy(a) pthread_cond_destroy((a))
#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait((a), (b))
#define ZSTD_pthread_cond_signal(a) pthread_cond_signal((a))
#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast((a))
#define ZSTD_pthread_t pthread_t
#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d))
#define ZSTD_pthread_join(a, b) pthread_join((a),(b))
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 #else /* DEBUGLEVEL >= 1 */
/* Debug implementation of threading.
* In this implementation we use pointers for mutexes and condition variables.
* This way, if we forget to init/destroy them the program will crash or ASAN
* will report leaks.
*/
#define ZSTD_pthread_mutex_t pthread_mutex_t*
int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr);
int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex);
#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock(*(a))
#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock(*(a))
#define ZSTD_pthread_cond_t pthread_cond_t*
int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr);
int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond);
#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait(*(a), *(b))
#define ZSTD_pthread_cond_signal(a) pthread_cond_signal(*(a))
#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast(*(a))
#define ZSTD_pthread_t pthread_t
#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d))
#define ZSTD_pthread_join(a, b) pthread_join((a),(b))
#endif
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895 #else /* ZSTD_MULTITHREAD not defined */
/* No multithreading support */
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 typedef int ZSTD_pthread_mutex_t;
#define ZSTD_pthread_mutex_init(a, b) ((void)(a), (void)(b), 0)
#define ZSTD_pthread_mutex_destroy(a) ((void)(a))
#define ZSTD_pthread_mutex_lock(a) ((void)(a))
#define ZSTD_pthread_mutex_unlock(a) ((void)(a))
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 typedef int ZSTD_pthread_cond_t;
#define ZSTD_pthread_cond_init(a, b) ((void)(a), (void)(b), 0)
#define ZSTD_pthread_cond_destroy(a) ((void)(a))
#define ZSTD_pthread_cond_wait(a, b) ((void)(a), (void)(b))
#define ZSTD_pthread_cond_signal(a) ((void)(a))
#define ZSTD_pthread_cond_broadcast(a) ((void)(a))
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 /* do not use ZSTD_pthread_t */
Gregory Szorc
zstd: vendor python-zstandard 0.7.0...
r30895
#endif /* ZSTD_MULTITHREAD */
#if defined (__cplusplus)
}
#endif
#endif /* THREADING_H_938743 */