}
/* write only one pdu at a time - wait til it's our turn */
- pthread_mutex_lock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_lock( &conn->c_pdumutex );
/* write the pdu */
bytes = ber->ber_ptr - ber->ber_buf;
- pthread_mutex_lock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
while ( conn->c_connid == op->o_connid && ber_flush( &conn->c_sb, ber,
1 ) != 0 ) {
- pthread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
/*
* we got an error. if it's ewouldblock, we need to
* wait on the socket being writable. otherwise, figure
if ( errno != EWOULDBLOCK && errno != EAGAIN ) {
close_connection( conn, op->o_connid, op->o_opid );
- pthread_mutex_unlock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex );
return;
}
/* wait for socket to be write-ready */
- pthread_mutex_lock( &active_threads_mutex );
+ ldap_pvt_thread_mutex_lock( &active_threads_mutex );
active_threads--;
conn->c_writewaiter = 1;
- pthread_kill( listener_tid, LDAP_SIGUSR1 );
+ ldap_pvt_thread_kill( listener_tid, LDAP_SIGUSR1 );
- pthread_cond_wait( &conn->c_wcv, &active_threads_mutex );
- pthread_mutex_unlock( &active_threads_mutex );
+ ldap_pvt_thread_cond_wait( &conn->c_wcv, &active_threads_mutex );
- pthread_yield();
- pthread_mutex_lock( &new_conn_mutex );
+ if( active_threads < 1 ) {
+ ldap_pvt_thread_cond_signal(&active_threads_cond);
+ }
+ ldap_pvt_thread_mutex_unlock( &active_threads_mutex );
+
+ ldap_pvt_thread_yield();
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
}
- pthread_mutex_unlock( &new_conn_mutex );
- pthread_mutex_unlock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex );
- pthread_mutex_lock( &num_sent_mutex );
+ ldap_pvt_thread_mutex_lock( &num_sent_mutex );
num_bytes_sent += bytes;
- pthread_mutex_unlock( &num_sent_mutex );
+ ldap_pvt_thread_mutex_unlock( &num_sent_mutex );
Statslog( LDAP_DEBUG_STATS,
"conn=%d op=%d RESULT err=%d tag=%d nentries=%d\n", conn->c_connid,
Debug( LDAP_DEBUG_TRACE, "=> send_search_entry (%s)\n", e->e_dn, 0, 0 );
- if ( ! access_allowed( be, conn, op, e, "entry", NULL, op->o_dn,
- ACL_READ ) ) {
+ if ( ! access_allowed( be, conn, op, e,
+ "entry", NULL, ACL_READ ) )
+ {
Debug( LDAP_DEBUG_ACL, "acl: access to entry not allowed\n",
0, 0, 0 );
return( 1 );
}
- edn = dn_normalize_case( strdup( e->e_dn ) );
+ edn = e->e_ndn;
#ifdef LDAP_COMPAT30
if ( (ber = ber_alloc_t( conn->c_version == 30 ? 0 : LBER_USE_DER ))
a->a_type, 0, 0 );
acl = NULL;
} else {
- acl = acl_get_applicable( be, op, e, a->a_type, edn,
+ acl = acl_get_applicable( be, op, e, a->a_type,
MAXREMATCHES, matches );
}
- if ( ! acl_access_allowed( acl, be, conn, e, NULL, op, ACL_READ,
- edn, matches ) )
+ if ( ! acl_access_allowed( acl, be, conn, e,
+ NULL, op, ACL_READ, edn, matches ) )
{
continue;
}
}
}
- free(edn);
-
#ifdef LDAP_COMPAT30
if ( conn->c_version == 30 ) {
rc = ber_printf( ber, "}}}}" );
}
/* write only one pdu at a time - wait til it's our turn */
- pthread_mutex_lock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_lock( &conn->c_pdumutex );
bytes = ber->ber_ptr - ber->ber_buf;
- pthread_mutex_lock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
while ( conn->c_connid == op->o_connid && ber_flush( &conn->c_sb, ber,
1 ) != 0 ) {
- pthread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
/*
* we got an error. if it's ewouldblock, we need to
* wait on the socket being writable. otherwise, figure
if ( errno != EWOULDBLOCK && errno != EAGAIN ) {
close_connection( conn, op->o_connid, op->o_opid );
- pthread_mutex_unlock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex );
return( -1 );
}
/* wait for socket to be write-ready */
- pthread_mutex_lock( &active_threads_mutex );
+ ldap_pvt_thread_mutex_lock( &active_threads_mutex );
active_threads--;
conn->c_writewaiter = 1;
- pthread_kill( listener_tid, LDAP_SIGUSR1 );
- pthread_cond_wait( &conn->c_wcv, &active_threads_mutex );
- pthread_mutex_unlock( &active_threads_mutex );
+ ldap_pvt_thread_kill( listener_tid, LDAP_SIGUSR1 );
+ ldap_pvt_thread_cond_wait( &conn->c_wcv, &active_threads_mutex );
+
+ if( active_threads < 1 ) {
+ ldap_pvt_thread_cond_signal(&active_threads_cond);
+ }
+ ldap_pvt_thread_mutex_unlock( &active_threads_mutex );
- pthread_yield();
- pthread_mutex_lock( &new_conn_mutex );
+ ldap_pvt_thread_yield();
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
}
- pthread_mutex_unlock( &new_conn_mutex );
- pthread_mutex_unlock( &conn->c_pdumutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex );
- pthread_mutex_lock( &num_sent_mutex );
+ ldap_pvt_thread_mutex_lock( &num_sent_mutex );
num_bytes_sent += bytes;
num_entries_sent++;
- pthread_mutex_unlock( &num_sent_mutex );
+ ldap_pvt_thread_mutex_unlock( &num_sent_mutex );
- pthread_mutex_lock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
if ( conn->c_connid == op->o_connid ) {
rc = 0;
Statslog( LDAP_DEBUG_STATS2, "conn=%d op=%d ENTRY dn=\"%s\"\n",
} else {
rc = -1;
}
- pthread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
Debug( LDAP_DEBUG_TRACE, "<= send_search_entry\n", 0, 0, 0 );
return( rc );
error_return:;
- free(edn);
return( 1 );
}
void
close_connection( Connection *conn, int opconnid, int opid )
{
- pthread_mutex_lock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_lock( &new_conn_mutex );
if ( conn->c_sb.sb_sd != -1 && conn->c_connid == opconnid ) {
Statslog( LDAP_DEBUG_STATS,
"conn=%d op=%d fd=%d closed errno=%d\n", conn->c_connid,
conn->c_sb.sb_sd = -1;
conn->c_version = 0;
}
- pthread_mutex_unlock( &new_conn_mutex );
+ ldap_pvt_thread_mutex_unlock( &new_conn_mutex );
}