Annotation of embedaddon/php/TSRM/TSRM.h, revision 1.1.1.2

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | Thread Safe Resource Manager                                         |
                      4:    +----------------------------------------------------------------------+
                      5:    | Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
                      6:    | This source file is subject to the TSRM license, that is bundled     |
                      7:    | with this package in the file LICENSE                                |
                      8:    +----------------------------------------------------------------------+
                      9:    | Authors:  Zeev Suraski <zeev@zend.com>                               |
                     10:    +----------------------------------------------------------------------+
                     11: */
                     12: 
                     13: #ifndef TSRM_H
                     14: #define TSRM_H
                     15: 
                     16: #if !defined(__CYGWIN__) && defined(WIN32)
                     17: # define TSRM_WIN32
                     18: # include "tsrm_config.w32.h"
                     19: #else
                     20: # include <tsrm_config.h>
                     21: #endif
                     22: 
                     23: #ifdef TSRM_WIN32
                     24: #      ifdef TSRM_EXPORTS
                     25: #              define TSRM_API __declspec(dllexport)
                     26: #      else
                     27: #              define TSRM_API __declspec(dllimport)
                     28: #      endif
                     29: #elif defined(__GNUC__) && __GNUC__ >= 4
                     30: #      define TSRM_API __attribute__ ((visibility("default")))
                     31: #else
                     32: #      define TSRM_API
                     33: #endif
                     34: 
                     35: #ifdef _WIN64
                     36: typedef __int64 tsrm_intptr_t;
                     37: typedef unsigned __int64 tsrm_uintptr_t;
                     38: #else
                     39: typedef long tsrm_intptr_t;
                     40: typedef unsigned long tsrm_uintptr_t;
                     41: #endif
                     42: 
                     43: /* Only compile multi-threading functions if we're in ZTS mode */
                     44: #ifdef ZTS
                     45: 
                     46: #ifdef TSRM_WIN32
                     47: # ifndef TSRM_INCLUDE_FULL_WINDOWS_HEADERS
                     48: #  define WIN32_LEAN_AND_MEAN
                     49: # endif
                     50: # include <windows.h>
                     51: # include <shellapi.h>
                     52: #elif defined(GNUPTH)
                     53: # include <pth.h>
                     54: #elif defined(PTHREADS)
                     55: # include <pthread.h>
                     56: #elif defined(TSRM_ST)
                     57: # include <st.h>
                     58: #elif defined(BETHREADS)
                     59: #include <kernel/OS.h> 
                     60: #include <TLS.h>
                     61: #endif
                     62: 
                     63: typedef int ts_rsrc_id;
                     64: 
                     65: /* Define THREAD_T and MUTEX_T */
                     66: #ifdef TSRM_WIN32
                     67: # define THREAD_T DWORD
                     68: # define MUTEX_T CRITICAL_SECTION *
                     69: #elif defined(GNUPTH)
                     70: # define THREAD_T pth_t
                     71: # define MUTEX_T pth_mutex_t *
                     72: #elif defined(PTHREADS)
                     73: # define THREAD_T pthread_t
                     74: # define MUTEX_T pthread_mutex_t *
                     75: #elif defined(NSAPI)
                     76: # define THREAD_T SYS_THREAD
                     77: # define MUTEX_T CRITICAL
                     78: #elif defined(PI3WEB)
                     79: # define THREAD_T PIThread *
                     80: # define MUTEX_T PISync *
                     81: #elif defined(TSRM_ST)
                     82: # define THREAD_T st_thread_t
                     83: # define MUTEX_T st_mutex_t
                     84: #elif defined(BETHREADS)
                     85: # define THREAD_T thread_id
                     86: typedef struct {
                     87:   sem_id sem;
                     88:   int32 ben;
                     89: } beos_ben;
                     90: # define MUTEX_T beos_ben * 
                     91: #endif
                     92: 
1.1.1.2 ! misho      93: #ifdef HAVE_SIGNAL_H
        !            94: #include <signal.h>
        !            95: #endif
        !            96: 
1.1       misho      97: typedef void (*ts_allocate_ctor)(void *, void ***);
                     98: typedef void (*ts_allocate_dtor)(void *, void ***);
                     99: 
                    100: #define THREAD_HASH_OF(thr,ts)  (unsigned long)thr%(unsigned long)ts
                    101: 
                    102: #ifdef __cplusplus
                    103: extern "C" {
                    104: #endif
                    105: 
                    106: /* startup/shutdown */
                    107: TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
                    108: TSRM_API void tsrm_shutdown(void);
                    109: 
                    110: /* allocates a new thread-safe-resource id */
                    111: TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
                    112: 
                    113: /* fetches the requested resource for the current thread */
                    114: TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
                    115: #define ts_resource(id)                        ts_resource_ex(id, NULL)
                    116: 
                    117: /* frees all resources allocated for the current thread */
                    118: TSRM_API void ts_free_thread(void);
                    119: 
                    120: /* frees all resources allocated for all threads except current */
                    121: void ts_free_worker_threads(void);
                    122: 
                    123: /* deallocates all occurrences of a given id */
                    124: TSRM_API void ts_free_id(ts_rsrc_id id);
                    125: 
                    126: 
                    127: /* Debug support */
                    128: #define TSRM_ERROR_LEVEL_ERROR 1
                    129: #define TSRM_ERROR_LEVEL_CORE  2
                    130: #define TSRM_ERROR_LEVEL_INFO  3
                    131: 
                    132: typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id, void ***tsrm_ls);
                    133: typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id, void ***tsrm_ls);
                    134: 
                    135: 
                    136: TSRM_API int tsrm_error(int level, const char *format, ...);
                    137: TSRM_API void tsrm_error_set(int level, char *debug_filename);
                    138: 
                    139: /* utility functions */
                    140: TSRM_API THREAD_T tsrm_thread_id(void);
                    141: TSRM_API MUTEX_T tsrm_mutex_alloc(void);
                    142: TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
                    143: TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
                    144: TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
1.1.1.2 ! misho     145: #ifdef HAVE_SIGPROCMASK
        !           146: TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset);
        !           147: #endif
1.1       misho     148: 
                    149: TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
                    150: TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
                    151: 
                    152: /* these 3 APIs should only be used by people that fully understand the threading model
                    153:  * used by PHP/Zend and the selected SAPI. */
                    154: TSRM_API void *tsrm_new_interpreter_context(void);
                    155: TSRM_API void *tsrm_set_interpreter_context(void *new_ctx);
                    156: TSRM_API void tsrm_free_interpreter_context(void *context);
                    157: 
                    158: #define TSRM_SHUFFLE_RSRC_ID(rsrc_id)          ((rsrc_id)+1)
                    159: #define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id)                ((rsrc_id)-1)
                    160: 
                    161: #define TSRMLS_FETCH()                 void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
                    162: #define TSRMLS_FETCH_FROM_CTX(ctx)     void ***tsrm_ls = (void ***) ctx
                    163: #define TSRMLS_SET_CTX(ctx)            ctx = (void ***) tsrm_ls
                    164: #define TSRMG(id, type, element)       (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
                    165: #define TSRMLS_D       void ***tsrm_ls
                    166: #define TSRMLS_DC      , TSRMLS_D
                    167: #define TSRMLS_C       tsrm_ls
                    168: #define TSRMLS_CC      , TSRMLS_C
                    169: 
                    170: #ifdef __cplusplus
                    171: }
                    172: #endif
                    173: 
                    174: #else /* non ZTS */
                    175: 
                    176: #define TSRMLS_FETCH()
                    177: #define TSRMLS_FETCH_FROM_CTX(ctx)
                    178: #define TSRMLS_SET_CTX(ctx)
                    179: #define TSRMLS_D       void
                    180: #define TSRMLS_DC
                    181: #define TSRMLS_C
                    182: #define TSRMLS_CC
                    183: 
                    184: #endif /* ZTS */
                    185: 
                    186: #endif /* TSRM_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>