|
|
#include "libxode.h"
#include "config.h"
Go to the source code of this file.
Data Structures | |
struct | xode_pool_free |
Defines | |
#define | _xode_pool__malloc malloc |
#define | _xode_pool__free free |
Functions | |
xode_pool | _xode_pool_new (void) |
void | _xode_pool_heapfree (void *arg) |
void | _xode_pool_cleanup_append (xode_pool p, struct xode_pool_free *pf) |
xode_pool_free * | _xode_pool_free (xode_pool p, xode_pool_cleaner f, void *arg) |
xode_pool_heap * | _xode_pool_heap (xode_pool p, int size) |
xode_pool | _xode_pool_newheap (int bytes) |
void * | xode_pool_malloc (xode_pool p, int size) |
void * | xode_pool_mallocx (xode_pool p, int size, char c) |
void * | xode_pool_malloco (xode_pool p, int size) |
char * | xode_pool_strdup (xode_pool p, const char *src) |
char * | xode_pool_strdupx (xode_pool p, const char *src) |
int | xode_pool_size (xode_pool p) |
void | xode_pool_free (xode_pool p) |
void | xode_pool_cleanup (xode_pool p, xode_pool_cleaner f, void *arg) |
xode_pool | xode_pool_new (void) |
xode_pool | xode_pool_heap (const int bytes) |
|
Definition at line 44 of file pool.c. Referenced by _xode_pool_heapfree(), xode_pool_free(), and xode_pool_malloc(). |
|
Definition at line 43 of file pool.c. Referenced by _xode_pool_free(), _xode_pool_heap(), _xode_pool_new(), and xode_pool_malloc(). |
|
Definition at line 78 of file pool.c. References xode_pool_struct::cleanup, xode_pool_free::next, and xode_pool. Referenced by _xode_pool_heap(), and xode_pool_malloc(). 00079 { 00080 struct xode_pool_free *cur; 00081 00082 if(p->cleanup == NULL) 00083 { 00084 p->cleanup = pf; 00085 return; 00086 } 00087 00088 /* fast forward to end of list */ 00089 for(cur = p->cleanup; cur->next != NULL; cur = cur->next); 00090 00091 cur->next = pf; 00092 }
|
|
Definition at line 95 of file pool.c. References _xode_pool__malloc, xode_pool_free::arg, xode_pool_free::f, xode_pool_free::next, and xode_pool. Referenced by _xode_pool_heap(), xode_pool_cleanup(), and xode_pool_malloc(). 00096 { 00097 struct xode_pool_free *ret; 00098 00099 /* make the storage for the tracker */ 00100 while((ret = _xode_pool__malloc(sizeof(struct xode_pool_free))) == NULL) sleep(1); 00101 ret->f = f; 00102 ret->arg = arg; 00103 ret->next = NULL; 00104 00105 return ret; 00106 }
|
|
Definition at line 109 of file pool.c. References _xode_pool__malloc, _xode_pool_cleanup_append(), _xode_pool_free(), _xode_pool_heapfree(), xode_pool_heap::block, xode_pool_free::heap, xode_pool_struct::size, xode_pool_heap::size, xode_pool_heap::used, and xode_pool. Referenced by _xode_pool_newheap(), and xode_pool_malloc(). 00110 { 00111 struct xode_pool_heap *ret; 00112 struct xode_pool_free *clean; 00113 00114 /* make the return heap */ 00115 while((ret = _xode_pool__malloc(sizeof(struct xode_pool_heap))) == NULL) sleep(1); 00116 while((ret->block = _xode_pool__malloc(size)) == NULL) sleep(1); 00117 ret->size = size; 00118 p->size += size; 00119 ret->used = 0; 00120 00121 /* append to the cleanup list */ 00122 clean = _xode_pool_free(p, _xode_pool_heapfree, (void *)ret); 00123 clean->heap = ret; /* for future use in finding used mem for pstrdup */ 00124 _xode_pool_cleanup_append(p, clean); 00125 00126 return ret; 00127 }
|
|
Definition at line 69 of file pool.c. References _xode_pool__free, and xode_pool_heap::block. Referenced by _xode_pool_heap(). 00070 { 00071 struct xode_pool_heap *h = (struct xode_pool_heap *)arg; 00072 00073 _xode_pool__free(h->block); 00074 _xode_pool__free(h); 00075 }
|
|
Definition at line 57 of file pool.c. References _xode_pool, _xode_pool__malloc, xode_pool_struct::cleanup, xode_pool_struct::heap, xode_pool_struct::size, and xode_pool. Referenced by _xode_pool_newheap(), and xode_pool_new(). 00058 { 00059 xode_pool p; 00060 while((p = _xode_pool__malloc(sizeof(_xode_pool))) == NULL) sleep(1); 00061 p->cleanup = NULL; 00062 p->heap = NULL; 00063 p->size = 0; 00064 00065 return p; 00066 }
|
|
Definition at line 129 of file pool.c. References _xode_pool_heap(), _xode_pool_new(), xode_pool_struct::heap, and xode_pool. Referenced by xode_pool_heap(). 00130 { 00131 xode_pool p; 00132 p = _xode_pool_new(); 00133 p->heap = _xode_pool_heap(p,bytes); 00134 return p; 00135 }
|
|
Definition at line 232 of file pool.c. References _xode_pool_free(), xode_pool_struct::cleanup, xode_pool_free::next, and xode_pool. Referenced by xode_stream_new(). 00233 { 00234 struct xode_pool_free *clean; 00235 00236 clean = _xode_pool_free(p, f, arg); 00237 clean->next = p->cleanup; 00238 p->cleanup = clean; 00239 }
|
|
Definition at line 213 of file pool.c. References _xode_pool__free, xode_pool_free::arg, xode_pool_struct::cleanup, xode_pool_free::f, xode_pool_free::next, and xode_pool. Referenced by jab_delete(), jid_nodescan(), jwg_delete(), xode_free(), and xode_spool_free(). 00214 { 00215 struct xode_pool_free *cur, *stub; 00216 00217 if(p == NULL) return; 00218 00219 cur = p->cleanup; 00220 while(cur != NULL) 00221 { 00222 (*cur->f)(cur->arg); 00223 stub = cur->next; 00224 _xode_pool__free(cur); 00225 cur = stub; 00226 } 00227 00228 _xode_pool__free(p); 00229 }
|
|
Definition at line 246 of file pool.c. References _xode_pool_newheap(), and xode_pool. Referenced by xode_spool_new(). 00247 { 00248 return _xode_pool_newheap(bytes); 00249 }
|
|
Definition at line 137 of file pool.c. References _xode_pool__free, _xode_pool__malloc, _xode_pool_cleanup_append(), _xode_pool_free(), _xode_pool_heap(), xode_pool_heap::block, xode_pool_struct::heap, NULL, xode_pool_struct::size, xode_pool_heap::size, xode_pool_heap::used, and xode_pool. Referenced by jab_auth(), jabpacket_new(), jwgpacket_new(), spool_print(), xode_insert_cdata(), xode_pool_malloco(), xode_pool_mallocx(), xode_pool_strdup(), xode_spool_add(), xode_spool_newfrompool(), xode_spool_tostr(), xode_strescape(), and xode_strunescape(). 00138 { 00139 void *block; 00140 00141 if(p == NULL) 00142 { 00143 fprintf(stderr,"Memory Leak! xode_pmalloc received NULL pool, unable to track allocation, exiting]\n"); 00144 abort(); 00145 } 00146 00147 /* if there is no heap for this pool or it's a big request, just raw, I like how we clean this :) */ 00148 if(p->heap == NULL || size > (p->heap->size / 2)) 00149 { 00150 while((block = _xode_pool__malloc(size)) == NULL) sleep(1); 00151 p->size += size; 00152 _xode_pool_cleanup_append(p, _xode_pool_free(p, _xode_pool__free, block)); 00153 return block; 00154 } 00155 00156 /* we have to preserve boundaries, long story :) */ 00157 if(size >= 4) 00158 while(p->heap->used&7) p->heap->used++; 00159 00160 /* if we don't fit in the old heap, replace it */ 00161 if(size > (p->heap->size - p->heap->used)) 00162 p->heap = _xode_pool_heap(p, p->heap->size); 00163 00164 /* the current heap has room */ 00165 block = (char *)p->heap->block + p->heap->used; 00166 p->heap->used += size; 00167 return block; 00168 }
|
|
Definition at line 179 of file pool.c. References xode_pool, and xode_pool_malloc(). Referenced by jid_new(), jid_user(), and xode_stream_new(). 00180 { 00181 void *block = xode_pool_malloc(p, size); 00182 memset(block, 0, size); 00183 return block; 00184 }
|
|
Definition at line 170 of file pool.c. References xode_pool, and xode_pool_malloc(). Referenced by jab_new(), jwg_new(), and jwg_server(). 00171 { 00172 void* result = xode_pool_malloc(p, size); 00173 if (result != NULL) 00174 memset(result, c, size); 00175 return result; 00176 }
|
|
Definition at line 241 of file pool.c. References _xode_pool_new(), and xode_pool. Referenced by jab_new(), jid_nodescan(), jwg_new(), and jwg_server(). 00242 { 00243 return _xode_pool_new(); 00244 }
|
|
Definition at line 206 of file pool.c. References xode_pool_struct::size, and xode_pool. Referenced by xode_stream_eat(). 00207 { 00208 if(p == NULL) return 0; 00209 00210 return p->size; 00211 }
|
|
Definition at line 187 of file pool.c. References xode_pool, and xode_pool_malloc(). Referenced by jab_new(), jid_new(), jid_set(), jid_xres(), xode_pool_strdupx(), xode_put_attrib(), and xode_spool_add(). 00188 { 00189 char *ret; 00190 00191 if(src == NULL) 00192 return NULL; 00193 00194 ret = xode_pool_malloc(p,strlen(src) + 1); 00195 strcpy(ret,src); 00196 00197 return ret; 00198 }
|
|
Definition at line 201 of file pool.c. References xode_pool, and xode_pool_strdup(). 00202 { 00203 return xode_pool_strdup(p, src); 00204 }
|
Last updated at Tue Dec 18 21:07:42 PST 2007. | This site and project hosted by... |