version 1.124.2.6, 2007/02/13 20:22:12
|
version 1.124.2.7, 2007/08/31 23:13:56
|
Line 1
|
Line 1
|
/* result.c - wait for an ldap result */ |
/* result.c - wait for an ldap result */ |
/* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.151 2007/02/05 19:32:44 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.154 2007/06/14 20:35:41 ando Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1998-2007 The OpenLDAP Foundation. |
* Copyright 1998-2007 The OpenLDAP Foundation. |
Line 263 wait4msg(
|
Line 263 wait4msg(
|
int rc; |
int rc; |
struct timeval tv = { 0 }, |
struct timeval tv = { 0 }, |
tv0 = { 0 }, |
tv0 = { 0 }, |
*tvp; |
start_time_tv = { 0 }, |
time_t start_time = 0; |
*tvp = NULL; |
time_t tmp_time; |
|
LDAPConn *lc; |
LDAPConn *lc; |
|
|
assert( ld != NULL ); |
assert( ld != NULL ); |
Line 290 wait4msg(
|
Line 289 wait4msg(
|
} |
} |
#endif /* LDAP_DEBUG */ |
#endif /* LDAP_DEBUG */ |
|
|
if ( timeout == NULL ) { |
if ( timeout != NULL ) { |
tvp = NULL; |
|
} else { |
|
tv0 = *timeout; |
tv0 = *timeout; |
tv = *timeout; |
tv = *timeout; |
tvp = &tv; |
tvp = &tv; |
start_time = time( NULL ); |
#ifdef HAVE_GETTIMEOFDAY |
|
gettimeofday( &start_time_tv, NULL ); |
|
#else /* ! HAVE_GETTIMEOFDAY */ |
|
time( &start_time_tv.tv_sec ); |
|
start_time_tv.tv_usec = 0; |
|
#endif /* ! HAVE_GETTIMEOFDAY */ |
} |
} |
|
|
rc = LDAP_MSG_X_KEEP_LOOKING; |
rc = LDAP_MSG_X_KEEP_LOOKING; |
Line 423 wait4msg(
|
Line 425 wait4msg(
|
} |
} |
|
|
if ( rc == LDAP_MSG_X_KEEP_LOOKING && tvp != NULL ) { |
if ( rc == LDAP_MSG_X_KEEP_LOOKING && tvp != NULL ) { |
tmp_time = time( NULL ); |
struct timeval curr_time_tv = { 0 }, |
tv0.tv_sec -= ( tmp_time - start_time ); |
delta_time_tv = { 0 }; |
if ( tv0.tv_sec <= 0 ) { |
|
rc = 0; /* timed out */ |
#ifdef HAVE_GETTIMEOFDAY |
|
gettimeofday( &curr_time_tv, NULL ); |
|
#else /* ! HAVE_GETTIMEOFDAY */ |
|
time( &curr_time_tv.tv_sec ); |
|
curr_time_tv.tv_usec = 0; |
|
#endif /* ! HAVE_GETTIMEOFDAY */ |
|
|
|
/* delta_time = tmp_time - start_time */ |
|
delta_time_tv.tv_sec = curr_time_tv.tv_sec - start_time_tv.tv_sec; |
|
delta_time_tv.tv_usec = curr_time_tv.tv_usec - start_time_tv.tv_usec; |
|
if ( delta_time_tv.tv_usec < 0 ) { |
|
delta_time_tv.tv_sec--; |
|
delta_time_tv.tv_usec += 1000000; |
|
} |
|
|
|
/* tv0 < delta_time ? */ |
|
if ( ( tv0.tv_sec < delta_time_tv.tv_sec ) || |
|
( ( tv0.tv_sec == delta_time_tv.tv_sec ) && ( tv0.tv_usec < delta_time_tv.tv_usec ) ) ) |
|
{ |
|
rc = 0; /* timed out */ |
ld->ld_errno = LDAP_TIMEOUT; |
ld->ld_errno = LDAP_TIMEOUT; |
break; |
break; |
} |
} |
|
|
|
/* tv0 -= delta_time */ |
|
tv0.tv_sec -= delta_time_tv.tv_sec; |
|
tv0.tv_usec -= delta_time_tv.tv_usec; |
|
if ( tv0.tv_usec < 0 ) { |
|
tv0.tv_sec--; |
|
tv0.tv_usec += 1000000; |
|
} |
|
|
tv.tv_sec = tv0.tv_sec; |
tv.tv_sec = tv0.tv_sec; |
|
tv.tv_usec = tv0.tv_usec; |
|
|
|
Debug( LDAP_DEBUG_TRACE, "wait4msg ld %p %ld s %ld us to go\n", |
|
(void *)ld, (long) tv.tv_sec, (long) tv.tv_usec ); |
|
|
Debug( LDAP_DEBUG_TRACE, "wait4msg ld %p %ld secs to go\n", |
start_time_tv.tv_sec = curr_time_tv.tv_sec; |
(void *)ld, (long) tv.tv_sec, 0 ); |
start_time_tv.tv_usec = curr_time_tv.tv_usec; |
start_time = tmp_time; |
|
} |
} |
} |
} |
|
|