diff options
author | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
commit | 16cbf3c076a0aca6d47adaf3f719493674cf2363 (patch) | |
tree | e6530480020f62a2bdbf249988ec3e2a751d3927 /src/nxt_buf_pool.h | |
download | unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.gz unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.bz2 |
Initial version.
Diffstat (limited to 'src/nxt_buf_pool.h')
-rw-r--r-- | src/nxt_buf_pool.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/nxt_buf_pool.h b/src/nxt_buf_pool.h new file mode 100644 index 00000000..59609b26 --- /dev/null +++ b/src/nxt_buf_pool.h @@ -0,0 +1,80 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_BUF_POOL_H_INCLUDED_ +#define _NXT_BUF_POOL_H_INCLUDED_ + + +/* + * nxt_buf_pool_t is intended to allocate up to the "max" number + * memory, memory/file, or mmap/file buffers. A size of the buffers + * is set in the "size" field. The size however can be overridden in + * nxt_buf_pool_XXX_alloc() by the "size" argument if the argument is + * not zero and lesser than or equal to the "size" field multiplied + * by 1.25. The "flags" field is passed as the nxt_mem_buf() flags. + */ + +typedef struct { + nxt_buf_t *current; + nxt_buf_t *free; + nxt_mem_pool_t *mem_pool; + + uint16_t num; + uint16_t max; + + uint32_t size; + + uint8_t flags; /* 2 bits */ + uint8_t destroy; /* 1 bit */ + uint8_t mmap; /* 1 bit */ +} nxt_buf_pool_t; + + +NXT_EXPORT nxt_int_t nxt_buf_pool_mem_alloc(nxt_buf_pool_t *bp, size_t size); +NXT_EXPORT nxt_int_t nxt_buf_pool_file_alloc(nxt_buf_pool_t *bp, size_t size); +NXT_EXPORT nxt_int_t nxt_buf_pool_mmap_alloc(nxt_buf_pool_t *bp, size_t size); +NXT_EXPORT void nxt_buf_pool_free(nxt_buf_pool_t *bp, nxt_buf_t *b); +NXT_EXPORT void nxt_buf_pool_destroy(nxt_buf_pool_t *bp); + + +/* There is ready free buffer. */ + +#define \ +nxt_buf_pool_ready(bp) \ + ((bp)->free != NULL \ + || ((bp)->current != NULL \ + && (bp)->current->mem.free < (bp)->current->mem.end)) + + +/* A free buffer is allowed to be allocated. */ + +#define \ +nxt_buf_pool_obtainable(bp) \ + ((bp)->num < (bp)->max) + + +/* There is ready free buffer or it is allowed to be allocated. */ + +#define \ +nxt_buf_pool_available(bp) \ + (nxt_buf_pool_obtainable(bp) || nxt_buf_pool_ready(bp)) + + +/* Reserve allocation of "n" free buffers as they were allocated. */ + +#define \ +nxt_buf_pool_reserve(bp, n) \ + (bp)->num += (n) + + +/* Release a reservation. */ + +#define \ +nxt_buf_pool_release(bp, n) \ + (bp)->num -= (n) + + +#endif /* _NXT_BUF_POOL_H_INCLUDED_ */ |