OpenLDAP 2.3 Change Log
OpenLDAP 2.3.18 Engineering
+ Fixed slapd wake_listener
+ Removed slapd-bdb/hdb extraneous yields (ITS#3950)
+ Build Environment
+ Removed problematic Linux sched_yield(2) workarounds (ITS#3950)
+ Documentation
+ Updated release documents
OpenLDAP 2.3.17 Release
Fixed slapd anonymous proxy authorization issue (ITS#4320)
6. Test the standalone system:
This step requires the standalone LDAP server, slapd(8), with
- BDB, HDB, and/or LDBM support.
+ BDB or HDB support.
% make test
fi
ol_replace_broken_yield=no
- case "$target" in
- *-*-linux*)
- AC_CHECK_FUNCS(nanosleep)
- ol_replace_broken_yield=yes
- ;;
- esac
+dnl case "$target" in
+dnl *-*-linux*)
+dnl AC_CHECK_FUNCS(nanosleep)
+dnl ol_replace_broken_yield=yes
+dnl ;;
+dnl esac
if test $ol_replace_broken_yield = yes ; then
AC_DEFINE([REPLACE_BROKEN_YIELD],1,
Implement additional matching rules (RFC 3698)
Add dumpasn1 logging support
Add tests to test suite
-Add jail(2) support
Recode linked-list structs to use <ldap_queue.h> macros
Convert utfconv.txt into man page(s).
Update manual pages as needed.
str = bv->bv_val;
end = str + bv->bv_len;
- Debug( LDAP_DEBUG_TRACE, "=> ldap_bv2dn(%s,%u)\n", str, flags, 0 );
+ Debug( LDAP_DEBUG_ARGS, "=> ldap_bv2dn(%s,%u)\n", str, flags, 0 );
*dn = NULL;
LDAP_FREEX( tmpDN, ctx );
}
- Debug( LDAP_DEBUG_TRACE, "<= ldap_bv2dn(%s)=%d %s\n", str, rc,
- ldap_err2string( rc ) );
+ Debug( LDAP_DEBUG_ARGS, "<= ldap_bv2dn(%s)=%d %s\n", str, rc,
+ rc ? ldap_err2string( rc ) : "" );
*dn = newDN;
return( rc );
bv->bv_len = 0;
bv->bv_val = NULL;
- Debug( LDAP_DEBUG_TRACE, "=> ldap_dn2bv(%u)\n", flags, 0, 0 );
+ Debug( LDAP_DEBUG_ARGS, "=> ldap_dn2bv(%u)\n", flags, 0, 0 );
/*
* a null dn means an empty dn string
return LDAP_PARAM_ERROR;
}
- Debug( LDAP_DEBUG_TRACE, "<= ldap_dn2bv(%s)=%d %s\n",
- bv->bv_val, rc, ldap_err2string( rc ) );
+ Debug( LDAP_DEBUG_ARGS, "<= ldap_dn2bv(%s)=%d %s\n",
+ bv->bv_val, rc, rc ? ldap_err2string( rc ) : "" );
return_results:;
return( rc );
{
static char buf[256];
int num;
- LDAPMod tmp;
+ LDAPMod tmp = { 0 };
LDAPMod **result;
struct berval **bvals;
: LDAP_INT_THREAD_POOL_STOPPING;
ldap_pvt_thread_cond_broadcast(&pool->ltp_cond);
- ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex);
-
- do {
- ldap_pvt_thread_yield();
- ldap_pvt_thread_mutex_lock(&pool->ltp_mutex);
- waiting = pool->ltp_open_count;
- ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex);
- } while (waiting > 0);
+ ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex);
while ((ctx = LDAP_STAILQ_FIRST(&pool->ltp_pending_list)) != NULL)
{
* should be like this:
* if (pool->ltp_open_count > 1 && pool->ltp_starting == 0)
* check timer, leave thread (break;)
+ *
+ * Just use pthread_cond_timedwait if we want to
+ * check idle time.
*/
if (pool->ltp_state == LDAP_INT_THREAD_POOL_RUNNING
}
ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex);
}
- ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex);
-
- ldap_pvt_thread_yield();
-
- /* if we use an idle timer, here's
- * a good place to update it
- */
-
- ldap_pvt_thread_mutex_lock(&pool->ltp_mutex);
}
for ( i=0; i<MAXKEYS && ltc_key[i].ltk_key; i++ ) {
thread_keys[keyslot].id = tid_zero;
pool->ltp_open_count--;
+
+ /* let pool_destroy know we're all done */
+ if (pool->ltp_open_count < 1)
+ ldap_pvt_thread_cond_signal(&pool->ltp_cond);
+
ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex);
ldap_pvt_thread_exit(NULL);