author | zautrix <zautrix> | 2005-07-04 19:21:19 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-07-04 19:21:19 (UTC) |
commit | 16898aecbedb978169efef1e1e0233578a42a46e (patch) (side-by-side diff) | |
tree | a391b6c44fd2df62daf5f643393af03bf051f4f0 /libical | |
parent | 2710cddd5b0b69efc1c5a7f8516d5b451ff258f1 (diff) | |
download | kdepimpi-16898aecbedb978169efef1e1e0233578a42a46e.zip kdepimpi-16898aecbedb978169efef1e1e0233578a42a46e.tar.gz kdepimpi-16898aecbedb978169efef1e1e0233578a42a46e.tar.bz2 |
free ring buffer
-rw-r--r-- | libical/src/libical/icalmemory.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libical/src/libical/icalmemory.c b/libical/src/libical/icalmemory.c index 3ed38ad..d22561e 100644 --- a/libical/src/libical/icalmemory.c +++ b/libical/src/libical/icalmemory.c @@ -24,97 +24,97 @@ 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is icalmemory.h ======================================================================*/ /** * @file icalmemory.c * @brief Common memory management routines. * * libical often passes strings back to the caller. To make these * interfaces simple, I did not want the caller to have to pass in a * memory buffer, but having libical pass out newly allocated memory * makes it difficult to de-allocate the memory. * * The ring buffer in this scheme makes it possible for libical to pass * out references to memory which the caller does not own, and be able * to de-allocate the memory later. The ring allows libical to have * several buffers active simultaneously, which is handy when creating * string representations of components. */ #define ICALMEMORY_C #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef DMALLOC #include "dmalloc.h" #endif #include "icalmemory.h" #include "icalerror.h" #include <stdio.h> /* for printf (debugging) */ #include <stdlib.h> /* for malloc, realloc */ #include <string.h> /* for memset(), strdup */ #ifdef WIN32 #include <windows.h> #endif -#define BUFFER_RING_SIZE 100 +#define BUFFER_RING_SIZE 25 #define MIN_BUFFER_SIZE 64 /* HACK. Not threadsafe */ typedef struct { int pos; void *ring[BUFFER_RING_SIZE]; } buffer_ring; void icalmemory_free_tmp_buffer (void* buf); void icalmemory_free_ring_byval(buffer_ring *br); static buffer_ring* global_buffer_ring = 0; #ifdef HAVE_PTHREAD #include <pthread.h> static pthread_key_t ring_key; static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT; static void ring_destroy(void * buf) { if (buf) icalmemory_free_ring_byval((buffer_ring *) buf); pthread_setspecific(ring_key, NULL); } static void ring_key_alloc(void) { pthread_key_create(&ring_key, ring_destroy); } #endif static buffer_ring * buffer_ring_new(void) { buffer_ring *br; int i; br = (buffer_ring *)malloc(sizeof(buffer_ring)); for(i=0; i<BUFFER_RING_SIZE; i++){ br->ring[i] = 0; } br->pos = 0; return(br); } #ifdef HAVE_PTHREAD static buffer_ring* get_buffer_ring_pthread(void) { |