diff options
author | Werner Koch <[email protected]> | 1998-10-12 20:16:38 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 1998-10-12 20:16:38 +0000 |
commit | 8477407e794951c686e3afe1d13035abd0153d9f (patch) | |
tree | a062f99923861fe7c55d5cc2ff3cf04daba8c8e0 /g10/kbnode.c | |
parent | a new release (diff) | |
download | gnupg-8477407e794951c686e3afe1d13035abd0153d9f.tar.gz gnupg-8477407e794951c686e3afe1d13035abd0153d9f.zip |
backup
Diffstat (limited to 'g10/kbnode.c')
-rw-r--r-- | g10/kbnode.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/g10/kbnode.c b/g10/kbnode.c index 428768105..18b16d0bd 100644 --- a/g10/kbnode.c +++ b/g10/kbnode.c @@ -28,12 +28,20 @@ #include "packet.h" #include "keydb.h" +#define USE_UNUSED_NODES 1 +static KBNODE unused_nodes; KBNODE new_kbnode( PACKET *pkt ) { - KBNODE n = m_alloc( sizeof *n ); + KBNODE n; + + n = unused_nodes; + if( n ) + unused_nodes = n->next; + else + n = m_alloc( sizeof *n ); n->next = NULL; n->pkt = pkt; n->flag = 0; @@ -45,7 +53,13 @@ new_kbnode( PACKET *pkt ) KBNODE clone_kbnode( KBNODE node ) { - KBNODE n = m_alloc( sizeof *n ); + KBNODE n; + + n = unused_nodes; + if( n ) + unused_nodes = n->next; + else + n = m_alloc( sizeof *n ); n->next = NULL; n->pkt = node->pkt; n->flag = 0; @@ -61,9 +75,16 @@ release_kbnode( KBNODE n ) while( n ) { n2 = n->next; - if( !(n->private_flag & 2) ) + if( !(n->private_flag & 2) ) { free_packet( n->pkt ); + m_free( n->pkt ); + } + #if USE_UNUSED_NODES + n->next = unused_nodes; + unused_nodes = n; + #else m_free( n ); + #endif n = n2; } } @@ -230,9 +251,16 @@ commit_kbnode( KBNODE *root ) *root = nl = n->next; else nl->next = n->next; - if( !(n->private_flag & 2) ) + if( !(n->private_flag & 2) ) { free_packet( n->pkt ); + m_free( n->pkt ); + } + #if USE_UNUSED_NODES + n->next = unused_nodes; + unused_nodes = n; + #else m_free( n ); + #endif changed = 1; } else |