*/
typedef struct fr_fifo_t fr_fifo_t;
typedef void (*fr_fifo_free_t)(void *);
-fr_fifo_t *fr_fifo_create(int max_entries, fr_fifo_free_t freeNode);
+fr_fifo_t *fr_fifo_create(TALLOC_CTX *ctx, int max_entries, fr_fifo_free_t freeNode);
void fr_fifo_free(fr_fifo_t *fi);
int fr_fifo_push(fr_fifo_t *fi, void *data);
void *fr_fifo_pop(fr_fifo_t *fi);
};
-fr_fifo_t *fr_fifo_create(int max, fr_fifo_free_t freeNode)
+fr_fifo_t *fr_fifo_create(TALLOC_CTX *ctx, int max, fr_fifo_free_t freeNode)
{
fr_fifo_t *fi;
if ((max < 2) || (max > (1024 * 1024))) return NULL;
- fi = malloc(sizeof(*fi) + (sizeof(fi->data[0])*max));
+ fi = talloc_zero_size(ctx, (sizeof(*fi) + (sizeof(fi->data[0])*max)));
if (!fi) return NULL;
-
- memset(fi, 0, sizeof(*fi));
+ talloc_set_type(fi, fr_fifo_t);
fi->max = max;
- fi->first = 0;
- fi->last = 0;
- fi->num = 0;
fi->freeNode = freeNode;
return fi;
}
memset(fi, 0, sizeof(*fi));
- free(fi);
+ talloc_free(fi);
}
int fr_fifo_push(fr_fifo_t *fi, void *data)
int i, j, array[MAX];
fr_fifo_t *fi;
- fi = fr_fifo_create(MAX, NULL);
+ fi = fr_fifo_create(NULL, MAX, NULL);
if (!fi) fr_exit(1);
for (j = 0; j < 5; j++) {
time_t now;
if (!deleted_clients) {
- deleted_clients = fr_fifo_create(1024, (void (*)(void *))client_free);
+ deleted_clients = fr_fifo_create(NULL, 1024, (void (*)(void *))client_free);
if (!deleted_clients) return; /* MEMLEAK */
}
* Allocate multiple fifos.
*/
for (i = 0; i < RAD_LISTEN_MAX; i++) {
- thread_pool.fifo[i] = fr_fifo_create(thread_pool.max_queue_size, NULL);
+ thread_pool.fifo[i] = fr_fifo_create(NULL, thread_pool.max_queue_size, NULL);
if (!thread_pool.fifo[i]) {
ERROR("FATAL: Failed to set up request fifo");
return -1;