123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #ifndef ZEND_SHARED_ALLOC_H
- #define ZEND_SHARED_ALLOC_H
- #include "zend.h"
- #include "ZendAccelerator.h"
- #if defined(__APPLE__) && defined(__MACH__)
- # ifdef HAVE_SHM_MMAP_POSIX
- # define USE_SHM_OPEN 1
- # endif
- # ifdef HAVE_SHM_MMAP_ANON
- # define USE_MMAP 1
- # endif
- #elif defined(__linux__) || defined(_AIX)
- # ifdef HAVE_SHM_IPC
- # define USE_SHM 1
- # endif
- # ifdef HAVE_SHM_MMAP_ANON
- # define USE_MMAP 1
- # endif
- #elif defined(__sparc) || defined(__sun)
- # ifdef HAVE_SHM_MMAP_POSIX
- # define USE_SHM_OPEN 1
- # endif
- # ifdef HAVE_SHM_IPC
- # define USE_SHM 1
- # endif
- # if defined(__i386)
- # ifdef HAVE_SHM_MMAP_ANON
- # define USE_MMAP 1
- # endif
- # endif
- #else
- # ifdef HAVE_SHM_MMAP_POSIX
- # define USE_SHM_OPEN 1
- # endif
- # ifdef HAVE_SHM_MMAP_ANON
- # define USE_MMAP 1
- # endif
- # ifdef HAVE_SHM_IPC
- # define USE_SHM 1
- # endif
- #endif
- #define ALLOC_FAILURE 0
- #define ALLOC_SUCCESS 1
- #define FAILED_REATTACHED 2
- #define SUCCESSFULLY_REATTACHED 4
- #define ALLOC_FAIL_MAPPING 8
- typedef struct _zend_shared_segment {
- size_t size;
- size_t pos;
- void *p;
- } zend_shared_segment;
- typedef int (*create_segments_t)(size_t requested_size, zend_shared_segment ***shared_segments, int *shared_segment_count, char **error_in);
- typedef int (*detach_segment_t)(zend_shared_segment *shared_segment);
- typedef struct {
- create_segments_t create_segments;
- detach_segment_t detach_segment;
- size_t (*segment_type_size)(void);
- } zend_shared_memory_handlers;
- typedef struct _handler_entry {
- const char *name;
- zend_shared_memory_handlers *handler;
- } zend_shared_memory_handler_entry;
- typedef struct _zend_shared_memory_state {
- int *positions;
- size_t shared_free;
- } zend_shared_memory_state;
- typedef struct _zend_smm_shared_globals {
-
- zend_shared_segment **shared_segments;
-
- int shared_segments_count;
-
- size_t shared_free;
-
- int wasted_shared_memory;
-
- zend_bool memory_exhausted;
-
- zend_shared_memory_state shared_memory_state;
-
- void *app_shared_globals;
- } zend_smm_shared_globals;
- extern zend_smm_shared_globals *smm_shared_globals;
- #define ZSMMG(element) (smm_shared_globals->element)
- #define SHARED_ALLOC_REATTACHED (SUCCESS+1)
- int zend_shared_alloc_startup(size_t requested_size);
- void zend_shared_alloc_shutdown(void);
- void *zend_shared_alloc(size_t size);
- void *_zend_shared_memdup(void *p, size_t size, zend_bool free_source TSRMLS_DC);
- int zend_shared_memdup_size(void *p, size_t size);
- typedef union _align_test {
- void *ptr;
- double dbl;
- long lng;
- } align_test;
- #if ZEND_GCC_VERSION >= 2000
- # define PLATFORM_ALIGNMENT (__alignof__ (align_test))
- #else
- # define PLATFORM_ALIGNMENT (sizeof(align_test))
- #endif
- #define ZEND_ALIGNED_SIZE(size) \
- ((size + PLATFORM_ALIGNMENT - 1) & ~(PLATFORM_ALIGNMENT - 1))
- void zend_shared_alloc_lock(TSRMLS_D);
- void zend_shared_alloc_unlock(TSRMLS_D);
- void zend_shared_alloc_safe_unlock(TSRMLS_D);
- void zend_shared_alloc_clear_xlat_table(void);
- void zend_shared_alloc_register_xlat_entry(const void *old, const void *new);
- void *zend_shared_alloc_get_xlat_entry(const void *old);
- size_t zend_shared_alloc_get_free_memory(void);
- void zend_shared_alloc_save_state(void);
- void zend_shared_alloc_restore_state(void);
- const char *zend_accel_get_shared_model(void);
- void zend_accel_shared_protect(int mode TSRMLS_DC);
- #ifdef USE_MMAP
- extern zend_shared_memory_handlers zend_alloc_mmap_handlers;
- #endif
- #ifdef USE_SHM
- extern zend_shared_memory_handlers zend_alloc_shm_handlers;
- #endif
- #ifdef USE_SHM_OPEN
- extern zend_shared_memory_handlers zend_alloc_posix_handlers;
- #endif
- #ifdef ZEND_WIN32
- extern zend_shared_memory_handlers zend_alloc_win32_handlers;
- void zend_shared_alloc_create_lock(void);
- void zend_shared_alloc_lock_win32(void);
- void zend_shared_alloc_unlock_win32(void);
- #endif
- #endif
|