summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_buf_pool.h
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2017-01-17 20:00:00 +0300
committerIgor Sysoev <igor@sysoev.ru>2017-01-17 20:00:00 +0300
commit16cbf3c076a0aca6d47adaf3f719493674cf2363 (patch)
treee6530480020f62a2bdbf249988ec3e2a751d3927 /src/nxt_buf_pool.h
downloadunit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.gz
unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.bz2
Initial version.
Diffstat (limited to 'src/nxt_buf_pool.h')
-rw-r--r--src/nxt_buf_pool.h80
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_ */