#ifndef __TYPES_SHCTX #define __TYPES_SHCTX #ifndef SHSESS_BLOCK_MIN_SIZE #define SHSESS_BLOCK_MIN_SIZE 128 #endif #ifndef SHSESS_MAX_DATA_LEN #define SHSESS_MAX_DATA_LEN 4096 #endif #ifndef SHCTX_APPNAME #define SHCTX_APPNAME "haproxy" #endif #define SHCTX_E_ALLOC_CACHE -1 #define SHCTX_E_INIT_LOCK -2 #define SHCTX_F_REMOVING 0x1 /* Removing flag, does not accept new */ /* generic shctx struct */ struct shared_block { struct list list; unsigned int len; /* data length for the row */ unsigned int block_count; /* number of blocks */ unsigned int refcount; unsigned char data[0]; }; struct shared_context { #ifndef USE_PRIVATE_CACHE #ifdef USE_PTHREAD_PSHARED pthread_mutex_t mutex; #else unsigned int waiters; #endif #endif struct list avail; /* list for active and free blocks */ struct list hot; /* list for locked blocks */ unsigned int nbav; /* number of available blocks */ void (*free_block)(struct shared_block *first, struct shared_block *block); short int block_size; unsigned char data[0]; }; #endif