/*
***************************************************************************
-*
+*
* Mnemonic: sitrash
* Abstract: Delete all things referenced by a struct and then free the memory.
-*
+*
* Returns: Nothing
* Date: 08 March 2007
-* Author: E. Scott Daniels
+* Author: E. Scott Daniels
*
-******************************************************************************
+******************************************************************************
*/
#include "sisetup.h"
#include "sitransport.h"
-
+
extern void SItrash( int type, void *bp )
{
struct tp_blk *tp = NULL;
struct ioq_blk *iptr;
struct ioq_blk *inext;
+ if( bp == NULL ) {
+ return;
+ }
+
switch( type )
{
case IOQ_BLK:
free( iptr->addr );
free( iptr );
break;
-
- case TP_BLK: // we assume its off the list
+
+ case TP_BLK: // we assume its off the list
tp = (struct tp_blk *) bp;
- for( iptr = tp->squeue; iptr; iptr = inext ) // trash any pending send buffers
- {
+ iptr = tp->squeue;
+ while( iptr != NULL ) {
inext = iptr->next;
- free( iptr->data ); // we could recurse, but that seems silly
+
+ free( iptr->data ); // we could recurse, but that seems silly
free( iptr->addr );
free( iptr );
+
+ iptr = inext;
}
if( tp->fd >= 0 ) {
CLOSE( tp->fd );
}
-
- free( tp->addr ); // release the address bufers
- free( tp->paddr );
- free( tp ); // and release the block
+
+ free( tp->addr ); // release the address bufers
+ free( tp->paddr );
+ free( tp ); // and release the block
break;
}
}