Index: B:/users/irena/proj1/trunk/core/al/kernel/al_mad_pool.c
===================================================================
--- B:/users/irena/proj1/trunk/core/al/kernel/al_mad_pool.c	(revision 6890)
+++ B:/users/irena/proj1/trunk/core/al/kernel/al_mad_pool.c	(revision 6891)
@@ -366,6 +366,10 @@
 		return status;
 	}
 
+	//add ref to h_pool which is dereferenced in __cleanup_pool_key 
+	//in both success and error flow
+	ref_al_obj( &h_pool->obj );
+
 	/* Register the pool on the protection domain. */
 	if( key_type == AL_KEY_NORMAL )
 	{
@@ -420,8 +424,6 @@
 	/* Add this pool_key to the AL instance. */
 	al_insert_key( h_al, p_pool_key );
 
-	ref_al_obj( &h_pool->obj );
-
 	/*
 	 * Take a reference on the global pool_key for this CA, if it exists.
 	 * Note that the pool_key does not exist for the global MAD pool in
@@ -528,7 +530,7 @@
 	 * Remove the pool key from the pool to prevent further registrations
 	 * against this pool.
 	 */
-	if( p_pool_key->type == AL_KEY_NORMAL )
+	if( p_pool_key->type == AL_KEY_NORMAL && p_pool_key->pool_item.p_next != NULL)
 	{
 		cl_spinlock_acquire( &p_pool_key->h_pool->obj.lock );
 		cl_qlist_remove_item( &p_pool_key->h_pool->key_list,
