diff --git a/libraries/libldap/error.c b/libraries/libldap/error.c
index 9098aa5afee3979f406e1982c826a39d15a7737d..b0d5d3cda1234163ecd8b5be3274274067dc78b2 100644
--- a/libraries/libldap/error.c
+++ b/libraries/libldap/error.c
@@ -281,11 +281,11 @@ ldap_parse_result(
 	}
 
 	if( lm == NULL ) {
-		ld->ld_errno = LDAP_NO_RESULTS_RETURNED;
+		errcode = ld->ld_errno = LDAP_NO_RESULTS_RETURNED;
 #ifdef LDAP_R_COMPILE
 		ldap_pvt_thread_mutex_unlock( &ld->ld_res_mutex );
 #endif
-		return ld->ld_errno;
+	    goto done;
 	}
 
 	if ( ld->ld_error ) {
@@ -391,12 +391,14 @@ ldap_parse_result(
 		}
 	}
 
-	if ( freeit ) {
-		ldap_msgfree( r );
-	}
 #ifdef LDAP_R_COMPILE
 	ldap_pvt_thread_mutex_unlock( &ld->ld_res_mutex );
 #endif
 
-	return( errcode );
+done:
+	if ( freeit ) {
+		ldap_msgfree( r );
+	}
+
+	return errcode;
 }