diff --git a/servers/slapd/back-meta/search.c b/servers/slapd/back-meta/search.c
index a20e941748be0fcd604b6926c69c46fb26bb4bff..456c4be65599087c0ac3a93e7ebad7a4a1ae1dd4 100644
--- a/servers/slapd/back-meta/search.c
+++ b/servers/slapd/back-meta/search.c
@@ -1627,8 +1627,6 @@ err_pr:;
 								}
 							}
 #endif /* SLAPD_META_CLIENT_PR */
-
-							ldap_controls_free( ctrls );
 						}
 						/* fallthru */
 
@@ -1650,6 +1648,7 @@ err_pr:;
 							|| META_BACK_ONERR_STOP( mi ) )
 						{
 							const char *save_text = rs->sr_text;
+got_err:
 							savepriv = op->o_private;
 							op->o_private = (void *)i;
 							rs->sr_text = candidates[ i ].sr_text;
@@ -1658,27 +1657,19 @@ err_pr:;
 							op->o_private = savepriv;
 							ldap_msgfree( res );
 							res = NULL;
+							ldap_controls_free( ctrls );
 							goto finish;
 						}
 						break;
 	
 					default:
 						candidates[ i ].sr_err = rs->sr_err;
-						if ( META_BACK_ONERR_STOP( mi ) ) {
-							const char *save_text = rs->sr_text;
-							savepriv = op->o_private;
-							op->o_private = (void *)i;
-							rs->sr_text = candidates[ i ].sr_text;
-							send_ldap_result( op, rs );
-							rs->sr_text = save_text;
-							op->o_private = savepriv;
-							ldap_msgfree( res );
-							res = NULL;
-							goto finish;
-						}
+						if ( META_BACK_ONERR_STOP( mi ) )
+							goto got_err;
 						break;
 					}
 	
+					ldap_controls_free( ctrls );
 					last = i;
 					rc = 0;
 	
diff --git a/servers/slapd/config.c b/servers/slapd/config.c
index 8c95822d4eb09bbbad4bbf2557724ad2c6206433..fe89c1b7273f84c09f8cf3c3e1e253b675f664bd 100644
--- a/servers/slapd/config.c
+++ b/servers/slapd/config.c
@@ -2010,7 +2010,7 @@ slap_client_connect( LDAP **ldp, slap_bindconf *sb )
 			"slap_client_connect: "
 			"URI=%s TLS context initialization failed (%d)\n",
 			sb->sb_uri.bv_val, rc, 0 );
-		return rc;
+		goto done;
 	}
 #endif