blob: 533536be8c6c177bdafb10b5262b07140c74316c [file] [log] [blame]
/*
* include/haproxy/shctx-t.h - shared context management functions for SSL
*
* Copyright (C) 2011-2012 EXCELIANCE
*
* Author: Emeric Brun - emeric@exceliance.fr
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef __HAPROXY_SHCTX_T_H
#define __HAPROXY_SHCTX_T_H
#if !defined (USE_PRIVATE_CACHE) && defined(USE_PTHREAD_PSHARED)
#include <pthread.h>
#endif
#include <haproxy/api-t.h>
#include <haproxy/thread-t.h>
#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;
struct shared_block *last_reserved;
struct shared_block *last_append;
unsigned char data[VAR_ARRAY];
};
struct shared_context {
#ifndef USE_PRIVATE_CACHE
#ifdef USE_PTHREAD_PSHARED
pthread_mutex_t mutex;
#else
unsigned int waiters;
#endif
#else
__decl_thread(HA_SPINLOCK_T lock); // used when USE_PRIVATE_CACHE=1
#endif
struct list avail; /* list for active and free blocks */
struct list hot; /* list for locked blocks */
unsigned int nbav; /* number of available blocks */
unsigned int max_obj_size; /* maximum object size (in bytes). */
void (*free_block)(struct shared_block *first, struct shared_block *block);
short int block_size;
unsigned char data[VAR_ARRAY];
};
#endif /* __HAPROXY_SHCTX_T_H */