diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c
index e6e7675f47f4b2cca540a665e0a4b7ff40d56198..5f336039f3137162aa146446855631144a07339f 100644
--- a/servers/slapd/backend.c
+++ b/servers/slapd/backend.c
@@ -484,10 +484,12 @@ int backend_destroy(void)
 		}
 
 		if ( bd->be_pending_csn_list ) {
-			LDAP_TAILQ_FOREACH( csne, bd->be_pending_csn_list, ce_csn_link ) {
+			csne = LDAP_TAILQ_FIRST( bd->be_pending_csn_list );
+			while ( csne ) {
 				LDAP_TAILQ_REMOVE( bd->be_pending_csn_list, csne, ce_csn_link );
 				ch_free( csne->ce_csn->bv_val );
 				ch_free( csne->ce_csn );
+				csne = LDAP_TAILQ_NEXT( csne, ce_csn_link );
 				ch_free( csne );
 			}
 		}