diff options
Diffstat (limited to 'TSRM/TSRM.h')
-rw-r--r-- | TSRM/TSRM.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h new file mode 100644 index 0000000000..8674a5d027 --- /dev/null +++ b/TSRM/TSRM.h @@ -0,0 +1,97 @@ +/* + +----------------------------------------------------------------------+ + | Thread Safe Resource Manager | + +----------------------------------------------------------------------+ + | Copyright (c) 1998, 1999 Zeev Suraski | + +----------------------------------------------------------------------+ + | This source file is subject to the Zend license, that is bundled | + | with this package in the file LICENSE. If you did not receive a | + | copy of the Zend license, please mail us at zend@zend.com so we can | + | send you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Zeev Suraski <zeev@zend.com> | + +----------------------------------------------------------------------+ +*/ + + +#ifndef _TSRM_H +#define _TSRM_H + +#ifdef HAVE_CONFIG_H +# include "tsrm_config.h" +#endif + +#if WIN32||WINNT +# include <windows.h> +#elif defined(PTHREADS) +# include <pthread.h> +#endif + +typedef int ts_rsrc_id; + +#if WIN32||WINNT +# ifdef TSRM_EXPORTS +# define TSRM_API __declspec(dllexport) +# else +# define TSRM_API __declspec(dllimport) +# endif +#else +# define TSRM_API +#endif + + +/* Define TSRM_FUNC */ +#ifdef __cplusplus +#define TSRM_FUNC extern "C" TSRM_API +#else +#define TSRM_FUNC TSRM_API +#endif + + +/* Define THREAD_T and MUTEX_T */ +#if defined(WIN32) +# define THREAD_T DWORD +# define MUTEX_T void * +#elif defined(PTHREADS) +# define THREAD_T pthread_t +# define MUTEX_T pthread_mutex_t * +#elif defined(NSAPI) +# define THREAD_T SYS_THREAD +# define MUTEX_T CRITICAL +#elif defined(PI3WEB) +# define THREAD_T PIThread * +# define MUTEX_T PISync * +#endif + + +#define THREAD_HASH_OF(thr,ts) thr%ts + + +/* startup/shutdown */ +TSRM_FUNC int tsrm_startup(int expected_threads, int expected_resources, int debug_status); +TSRM_FUNC void tsrm_shutdown(); + +/* allocates a new thread-safe-resource id */ +TSRM_FUNC ts_rsrc_id ts_allocate_id(size_t size, void (*ctor)(void *resource), void (*dtor)(void *resource)); + +/* fetches the requested resource for the current thread */ +TSRM_FUNC void *ts_resource(ts_rsrc_id id); + +/* frees all resources allocated for the current thread */ +TSRM_FUNC void ts_free_thread(); + +/* deallocates all occurrences of a given id */ +TSRM_FUNC void ts_free_id(ts_rsrc_id id); + + +/* Debug support */ +TSRM_FUNC void tsrm_debug_set(int status); + +/* utility functions */ +TSRM_FUNC THREAD_T tsrm_thread_id(void); +TSRM_FUNC MUTEX_T tsrm_mutex_alloc(void); +TSRM_FUNC void tsrm_mutex_free(MUTEX_T mutexp); +TSRM_FUNC int tsrm_mutex_lock(MUTEX_T mutexp); +TSRM_FUNC int tsrm_mutex_unlock(MUTEX_T mutexp); + +#endif /* _TSRM_H */ |