Use the LSAB_ALLOC and SLAB_FREE macros to allocate/free fvalue_t data

svn path=/trunk/; revision=9140
This commit is contained in:
Ronnie Sahlberg 2003-12-02 09:47:23 +00:00
parent 917c9da95e
commit 266b5a4b2e
3 changed files with 8 additions and 52 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: ftypes.c,v 1.14 2003/11/25 19:25:31 guy Exp $
* $Id: ftypes.c,v 1.15 2003/12/02 09:47:23 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -26,6 +26,7 @@
#include <ftypes-int.h>
#include <glib.h>
#include "../slab.h"
/* Keep track of ftype_t's via their ftenum number */
static ftype_t* type_list[FT_NUM_TYPES];
@ -33,15 +34,6 @@ static ftype_t* type_list[FT_NUM_TYPES];
/* Space for quickly allocating/de-allocating fvalue_t's */
fvalue_t *fvalue_free_list=NULL;
/* Chunk of fvalue_t values */
#define FVALUE_TS_PER_CHUNK 200
typedef struct _fvalue_chunk_t {
struct _fvalue_chunk_t *next;
fvalue_t fvalues[FVALUE_TS_PER_CHUNK];
} fvalue_chunk_t;
static fvalue_chunk_t *fvalue_chunk_list;
/* These are the ftype registration functions that need to be called.
* This list and the initialization function could be produced
* via a script, like the dissector registration, but there's so few
@ -69,20 +61,6 @@ ftypes_initialize(void)
ftype_register_tvbuff();
}
void
ftypes_cleanup(void)
{
while (fvalue_chunk_list) {
fvalue_chunk_t *tmpchunk;
tmpchunk=fvalue_chunk_list->next;
g_free(fvalue_chunk_list);
fvalue_chunk_list=tmpchunk;
}
fvalue_free_list=NULL;
}
/* Each ftype_t is registered via this function */
void
ftype_register(enum ftenum ftype, ftype_t *ft)
@ -215,21 +193,7 @@ fvalue_new(ftenum_t ftype)
ftype_t *ft;
FvalueNewFunc new_value;
if(!fvalue_free_list){
int i;
fvalue_chunk_t *chunk;
chunk=g_malloc(sizeof(fvalue_chunk_t));
chunk->next=fvalue_chunk_list;
fvalue_chunk_list=chunk;
for(i=0;i<FVALUE_TS_PER_CHUNK;i++){
fvalue_t *tmpfv;
tmpfv=&chunk->fvalues[i];
tmpfv->ptr_u.next=fvalue_free_list;
fvalue_free_list=tmpfv;
}
}
fv=fvalue_free_list;
fvalue_free_list=fv->ptr_u.next;
SLAB_ALLOC(fv, fv->ptr_u.next, fvalue_free_list);
FTYPE_LOOKUP(ftype, ft);
fv->ptr_u.ftype = ft;

View File

@ -1,7 +1,7 @@
/* ftypes.h
* Definitions for field types
*
* $Id: ftypes.h,v 1.21 2003/11/25 13:20:36 sahlberg Exp $
* $Id: ftypes.h,v 1.22 2003/12/02 09:47:23 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -27,7 +27,7 @@
#define FTYPES_H
#include <glib.h>
#include "../slab.h"
/* field types */
enum ftenum {
@ -78,11 +78,6 @@ typedef enum ftrepr ftrepr_t;
void
ftypes_initialize(void);
/* Cleanup the ftypes subsystem. Called once. */
void
ftypes_cleanup(void);
/* ---------------- FTYPE ----------------- */
/* Return a string representing the name of the type */
@ -218,13 +213,12 @@ fvalue_new(ftenum_t ftype);
extern fvalue_t *fvalue_free_list;
#define FVALUE_FREE(fv) \
{ \
FvalueFreeFunc free_value; \
register FvalueFreeFunc free_value; \
free_value = fv->ptr_u.ftype->free_value; \
if (free_value) { \
free_value(fv); \
} \
fv->ptr_u.next=fvalue_free_list; \
fvalue_free_list=fv; \
SLAB_FREE(fv, fv->ptr_u.next, fvalue_free_list);\
}

View File

@ -1,7 +1,7 @@
/* proto.c
* Routines for protocol tree
*
* $Id: proto.c,v 1.117 2003/12/02 09:11:15 sahlberg Exp $
* $Id: proto.c,v 1.118 2003/12/02 09:47:22 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -291,8 +291,6 @@ proto_cleanup(void)
if (tree_is_expanded != NULL)
g_free(tree_is_expanded);
/* Cleanup the ftype subsystem */
ftypes_cleanup();
}
/* frees the resources that the dissection a proto_tree uses */