rem: void free_hash(h_entry_t* hash, unsigned int hash_size, int do_cell)
add: void free_hash(pd_entry_t* hash, unsigned int hash_size)
context: void free_hash(h_entry_t* hash, unsigned int hash_size, int do_cell){    int   i;   /* index for hash entries */    entry_t *tmp, /* just a temporary variable */			*it;  /* iterator through cells of a has entry */    if(!hash || hash_size<=0)		return;    	/* free memory occupied by all hash entries */	for(i=0; i<hash_size; i++)	{		/* iterator through the i-th entry of the hash */		it = hash[i].e;				/* as long as we have a cell */		while(it != NULL)		{			/* retains the next cell */	    	tmp = it->n;			free_entry(it, do_cell);			/* the iterator points up to the next cell */			it = tmp;		}		lock_destroy(&hash[i].lock);    }	shm_free(hash);}