NeoMutt  2020-11-20
Teaching an old dog new tricks
DOXYGEN
pool.h File Reference

A global pool of Buffers. More...

+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void mutt_buffer_pool_free (void)
 Release the Buffer pool. More...
 
struct Buffermutt_buffer_pool_get (void)
 Get a Buffer from the pool. More...
 
void mutt_buffer_pool_release (struct Buffer **pbuf)
 Free a Buffer from the pool. More...
 

Detailed Description

A global pool of Buffers.

Authors
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file pool.h.

Function Documentation

◆ mutt_buffer_pool_free()

void mutt_buffer_pool_free ( void  )

Release the Buffer pool.

Definition at line 87 of file pool.c.

88 {
89  mutt_debug(LL_DEBUG1, "%zu of %zu returned to pool\n", BufferPoolCount, BufferPoolLen);
90 
91  while (BufferPoolCount)
93  FREE(&BufferPool);
94  BufferPoolLen = 0;
95 }
static size_t BufferPoolLen
Definition: pool.c:37
Log at debug level 1.
Definition: logging.h:40
#define FREE(x)
Definition: memory.h:40
#define mutt_debug(LEVEL,...)
Definition: logging.h:81
static struct Buffer ** BufferPool
Definition: pool.c:40
static size_t BufferPoolCount
Definition: pool.c:36
static void buffer_free(struct Buffer **p)
Release a Buffer and its contents.
Definition: pool.c:58
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mutt_buffer_pool_get()

struct Buffer* mutt_buffer_pool_get ( void  )

Get a Buffer from the pool.

Return values
ptrBuffer

Definition at line 101 of file pool.c.

102 {
103  if (BufferPoolCount == 0)
105  return BufferPool[--BufferPoolCount];
106 }
static void increase_buffer_pool(void)
Increase the size of the Buffer pool.
Definition: pool.c:70
static struct Buffer ** BufferPool
Definition: pool.c:40
static size_t BufferPoolCount
Definition: pool.c:36
+ Here is the call graph for this function:

◆ mutt_buffer_pool_release()

void mutt_buffer_pool_release ( struct Buffer **  pbuf)

Free a Buffer from the pool.

Parameters
[out]pbufBuffer to free

Definition at line 112 of file pool.c.

113 {
114  if (!pbuf || !*pbuf)
115  return;
116 
118  {
119  mutt_debug(LL_DEBUG1, "Internal buffer pool error\n");
120  buffer_free(pbuf);
121  return;
122  }
123 
124  struct Buffer *buf = *pbuf;
125  if ((buf->dsize > (2 * BufferPoolInitialBufferSize)) ||
127  {
129  mutt_mem_realloc(&buf->data, buf->dsize);
130  }
131  mutt_buffer_reset(buf);
132  BufferPool[BufferPoolCount++] = buf;
133 
134  *pbuf = NULL;
135 }
void mutt_buffer_reset(struct Buffer *buf)
Reset an existing Buffer.
Definition: buffer.c:79
String manipulation buffer.
Definition: buffer.h:33
size_t dsize
Length of data.
Definition: buffer.h:37
void mutt_mem_realloc(void *ptr, size_t size)
Resize a block of memory on the heap.
Definition: memory.c:114
char * data
Pointer to data.
Definition: buffer.h:35
static size_t BufferPoolLen
Definition: pool.c:37
Log at debug level 1.
Definition: logging.h:40
static size_t BufferPoolInitialBufferSize
Definition: pool.c:39
#define mutt_debug(LEVEL,...)
Definition: logging.h:81
static struct Buffer ** BufferPool
Definition: pool.c:40
static unsigned char * pbuf
Cache PGP data packet.
Definition: pgppacket.c:38
static size_t BufferPoolCount
Definition: pool.c:36
static void buffer_free(struct Buffer **p)
Release a Buffer and its contents.
Definition: pool.c:58
+ Here is the call graph for this function: