php-src/TSRM/TSRM.h

117 lines
3.2 KiB
C
Raw Normal View History

1999-04-23 11:00:02 +00:00
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
1999-04-23 11:00:02 +00:00
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
1999-04-23 11:00:02 +00:00
+----------------------------------------------------------------------+
*/
#ifndef TSRM_H
#define TSRM_H
1999-04-20 23:58:02 +00:00
1999-04-24 16:14:18 +00:00
#ifdef HAVE_CONFIG_H
1999-04-24 23:22:09 +00:00
# include "tsrm_config.h"
1999-04-24 09:01:30 +00:00
#endif
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
#ifdef WIN32
# define TSRM_WIN32
#endif
2000-09-02 15:03:19 +00:00
#ifdef TSRM_WIN32
1999-04-24 09:01:30 +00:00
# include <windows.h>
#elif defined(GNUPTH)
# include <pth.h>
1999-04-24 09:01:30 +00:00
#elif defined(PTHREADS)
# include <pthread.h>
#endif
1999-04-20 23:58:02 +00:00
typedef int ts_rsrc_id;
2000-09-02 15:03:19 +00:00
#ifdef TSRM_WIN32
1999-04-28 18:35:42 +00:00
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#else
# define TSRM_API
#endif
1999-04-20 23:58:02 +00:00
/* Define THREAD_T and MUTEX_T */
2000-09-02 15:03:19 +00:00
#ifdef TSRM_WIN32
1999-04-20 23:58:02 +00:00
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#elif defined(GNUPTH)
# define THREAD_T pth_t
# define MUTEX_T pth_mutex_t *
1999-04-20 23:58:02 +00:00
#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
1999-10-04 15:21:39 +00:00
typedef void (*ts_allocate_ctor)(void *);
typedef void (*ts_allocate_dtor)(void *);
1999-04-20 23:58:02 +00:00
#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
1999-04-20 23:58:02 +00:00
1999-08-14 09:35:52 +00:00
#ifdef __cplusplus
extern "C" {
#endif
1999-04-20 23:58:02 +00:00
/* startup/shutdown */
2000-11-18 02:41:14 +00:00
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
TSRM_API void tsrm_shutdown(void);
1999-04-20 23:58:02 +00:00
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
1999-04-20 23:58:02 +00:00
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
#define ts_resource(id) ts_resource_ex(id, NULL)
1999-04-20 23:58:02 +00:00
/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread(void);
1999-04-20 23:58:02 +00:00
/* deallocates all occurrences of a given id */
1999-08-14 09:35:52 +00:00
TSRM_API void ts_free_id(ts_rsrc_id id);
1999-04-20 23:58:02 +00:00
/* Debug support */
#define TSRM_ERROR_LEVEL_ERROR 1
2000-11-18 02:41:14 +00:00
#define TSRM_ERROR_LEVEL_CORE 2
#define TSRM_ERROR_LEVEL_INFO 3
TSRM_API int tsrm_error(int level, const char *format, ...);
TSRM_API void tsrm_error_set(int level, char *debug_filename);
1999-04-20 23:58:02 +00:00
/* utility functions */
1999-08-14 09:35:52 +00:00
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
TSRM_API void *tsrm_set_new_thread_begin_handler(void (*new_thread_begin_handler)(THREAD_T thread_id));
TSRM_API void *tsrm_set_new_thread_end_handler(void (*new_thread_end_handler)(THREAD_T thread_id));
#ifdef __cplusplus
}
#endif
1999-04-20 23:58:02 +00:00
#endif /* ZTS */
#endif /* TSRM_H */