+
+ /* FIXME: some times the request times out
+ * while the other party is not willing to
+ * send a response any more. Give it a second
+ * chance with a freshly bound connection */
+ rebinding = 1;
+ nretries = save_nretries;
+ /* fallthru */
+
+ case -1:
+ ldap_get_option( msc->msc_ld,
+ LDAP_OPT_ERROR_NUMBER, &rs->sr_err );
+
+ if ( rebinding ) {
+ ldap_abandon_ext( msc->msc_ld, msgid, NULL, NULL );
+ }
+
+ Debug( LDAP_DEBUG_ANY, "### %s meta_back_single_dobind: err=%d nretries=%d\n",
+ op->o_log_prefix, rs->sr_err, nretries );
+
+ rc = slap_map_api2result( rs );
+ if ( rc == LDAP_UNAVAILABLE && nretries != META_RETRY_NEVER ) {
+ ldap_unbind_ext_s( msc->msc_ld, NULL, NULL );
+ msc->msc_ld = NULL;
+ msc->msc_bound = 0;
+
+ /* mc here must be the regular mc, reset and ready for init */
+ rc = meta_back_init_one_conn( op, rs, mt, msc, LDAP_BACK_DONTSEND );
+
+ if ( rc == LDAP_SUCCESS ) {
+ ldap_pvt_thread_yield();
+ if ( nretries > 0 ) {
+ nretries--;
+ }
+ goto rebind;
+ }
+ }
+ break;
+
+ default:
+ rc = ldap_parse_result( msc->msc_ld, res, &rs->sr_err,
+ NULL, NULL, NULL, NULL, 1 );
+ if ( rc == LDAP_SUCCESS ) {
+ rc = slap_map_api2result( rs );
+ }
+ break;