diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 4a8a4cc6a2..2fcd8759f1 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -668,14 +668,21 @@ ldap_int_check_async_open( LDAP *ld, ber_socket_t sd ) ld->ld_defconn->lconn_status = LDAP_CONNST_CONNECTED; break; + case -2: + /* connect not completed yet, timed out? */ + LDAP_MUTEX_LOCK( &ld->ld_options.ldo_mutex ); + if ( time( NULL ) - ld->ld_defconn->lconn_created <= ld->ld_options.ldo_tm_net.tv_sec ) + { + ld->ld_errno = LDAP_X_CONNECTING; + LDAP_MUTEX_UNLOCK( &ld->ld_options.ldo_mutex ); + return rc; + } + LDAP_MUTEX_UNLOCK( &ld->ld_options.ldo_mutex ); + /* fallthru */ + default: ld->ld_errno = LDAP_CONNECT_ERROR; return -1; - - case -2: - /* connect not completed yet */ - ld->ld_errno = LDAP_X_CONNECTING; - return rc; } #ifdef HAVE_TLS