]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/connection.c
Fix ITS#3424
[openldap] / servers / slapd / connection.c
index 8ea63ce71f82b64e2ac849429239cf8ae8a575b3..43987952e86f1e8343271ea18bb6c4f94543b784 100644 (file)
@@ -34,7 +34,6 @@
 #include <ac/time.h>
 #include <ac/unistd.h>
 
-#include "ldap_pvt.h"
 #include "lutil.h"
 #include "slap.h"
 
@@ -315,13 +314,12 @@ static Connection* connection_get( ber_socket_t s )
                assert( c->c_conn_state != SLAP_C_INVALID );
                assert( sd != AC_SOCKET_INVALID );
 
-#ifdef SLAPD_MONITOR
-               c->c_activitytime = slap_get_time();
-#else
-               if( global_idletimeout > 0 ) {
+#ifndef SLAPD_MONITOR
+               if ( global_idletimeout > 0 )
+#endif /* ! SLAPD_MONITOR */
+               {
                        c->c_activitytime = slap_get_time();
                }
-#endif
        }
 
        return c;
@@ -514,13 +512,12 @@ long connection_init(
        /* set to zero until bind, implies LDAP_VERSION3 */
        c->c_protocol = 0;
 
-#ifdef SLAPD_MONITOR
-       c->c_activitytime = c->c_starttime = slap_get_time();
-#else
-       if( global_idletimeout > 0 ) {
+#ifndef SLAPD_MONITOR
+       if ( global_idletimeout > 0 )
+#endif /* ! SLAPD_MONITOR */
+       {
                c->c_activitytime = c->c_starttime = slap_get_time();
        }
-#endif
 
 #ifdef LDAP_CONNECTIONLESS
        c->c_is_udp = 0;
@@ -865,38 +862,20 @@ void connection_done( Connection *c )
  */
 
 #ifdef SLAPD_MONITOR
-#ifdef HAVE_GMP
-#define INCR_OP_INITIATED(index) \
-       do { \
-               ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-               mpz_add_ui(slap_counters.sc_ops_initiated_[(index)], \
-                               slap_counters.sc_ops_initiated_[(index)], 1); \
-               ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
-       } while (0)
-#define INCR_OP_COMPLETED(index) \
-       do { \
-               ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-               mpz_add_ui(slap_counters.sc_ops_completed, \
-                               slap_counters.sc_ops_completed, 1); \
-               mpz_add_ui(slap_counters.sc_ops_completed_[(index)], \
-                               slap_counters.sc_ops_completed_[(index)], 1); \
-               ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
-       } while (0)
-#else /* ! HAVE_GMP */
+/* FIXME: returns 0 in case of failure */
 #define INCR_OP_INITIATED(index) \
        do { \
                ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-               slap_counters.sc_ops_initiated_[(index)]++; \
+               ldap_pvt_mp_add_ulong(slap_counters.sc_ops_initiated_[(index)], 1); \
                ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
        } while (0)
 #define INCR_OP_COMPLETED(index) \
        do { \
                ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-               slap_counters.sc_ops_completed++; \
-               slap_counters.sc_ops_completed_[(index)]++; \
+               ldap_pvt_mp_add_ulong(slap_counters.sc_ops_completed, 1); \
+               ldap_pvt_mp_add_ulong(slap_counters.sc_ops_completed_[(index)], 1); \
                ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
        } while (0)
-#endif /* ! HAVE_GMP */
 #else /* !SLAPD_MONITOR */
 #define INCR_OP_INITIATED(index) 
 #define INCR_OP_COMPLETED(index) 
@@ -918,11 +897,8 @@ connection_operation( void *ctx, void *arg_v )
        ber_len_t memsiz;
 
        ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex );
-#ifdef HAVE_GMP
-       mpz_add_ui(slap_counters.sc_ops_initiated, slap_counters.sc_ops_initiated, 1);
-#else /* ! HAVE_GMP */
-       slap_counters.sc_ops_initiated++;
-#endif /* ! HAVE_GMP */
+       /* FIXME: returns 0 in case of failure */
+       ldap_pvt_mp_add_ulong(slap_counters.sc_ops_initiated, 1);
        ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex );
 
        op->o_threadctx = ctx;
@@ -970,7 +946,7 @@ connection_operation( void *ctx, void *arg_v )
 #endif
        memsiz = SLAP_SLAB_SIZE;
 
-       memctx = slap_sl_mem_create( memsiz, ctx );
+       memctx = slap_sl_mem_create( memsiz, SLAP_SLAB_STACK, ctx );
        op->o_tmpmemctx = memctx;
        op->o_tmpmfuncs = &slap_sl_mfuncs;
        if ( tag != LDAP_REQ_ADD && tag != LDAP_REQ_MODIFY ) {
@@ -1092,11 +1068,11 @@ operations_error:
 
        ber_set_option( op->o_ber, LBER_OPT_BER_MEMCTX, &memctx_null );
 
+#if 0  /* DELETE ME */
        if ( op->o_cancel != SLAP_CANCEL_ACK &&
                ( op->o_sync_mode & SLAP_SYNC_PERSIST ) )
        {
                slap_sl_mem_detach( ctx, memctx );
-
        } else if ( op->o_sync_slog_size != -1 ) {
                slap_sl_mem_detach( ctx, memctx );
                LDAP_STAILQ_REMOVE( &conn->c_ops, op, slap_op, o_next);
@@ -1104,7 +1080,9 @@ operations_error:
                conn->c_n_ops_executing--;
                conn->c_n_ops_completed++;
 
-       } else {
+       } else
+#endif
+       {
                LDAP_STAILQ_REMOVE( &conn->c_ops, op, slap_op, o_next);
                LDAP_STAILQ_NEXT(op, o_next) = NULL;
                slap_op_free( op );
@@ -1462,15 +1440,10 @@ connection_input(
        op = slap_op_alloc( ber, msgid, tag, conn->c_n_ops_received++ );
 
        op->o_conn = conn;
-       op->o_assertion = NULL;
-       op->o_preread_attrs = NULL;
-       op->o_postread_attrs = NULL;
-       op->o_vrFilter = NULL;
        /* clear state if the connection is being reused from inactive */
        if ( conn->c_conn_state == SLAP_C_INACTIVE ) {
                memset( &conn->c_pagedresults_state, 0, sizeof( conn->c_pagedresults_state ) );
        }
-       op->o_pagedresults_state = conn->c_pagedresults_state;
 
        op->o_res_ber = NULL;
 
@@ -1621,6 +1594,19 @@ connection_resched( Connection *conn )
        return 0;
 }
 
+static void
+connection_init_log_prefix( Operation *op )
+{
+       if ( op->o_connid == (unsigned long)(-1) ) {
+               snprintf( op->o_log_prefix, sizeof( op->o_log_prefix ),
+                               "conn=-1 op=%lu", op->o_opid );
+
+       } else {
+               snprintf( op->o_log_prefix, sizeof( op->o_log_prefix ),
+                               "conn=%lu op=%lu", op->o_connid, op->o_opid );
+       }
+}
+
 static int connection_op_activate( Operation *op )
 {
        int status;
@@ -1649,6 +1635,7 @@ static int connection_op_activate( Operation *op )
        }
 
        op->o_connid = op->o_conn->c_connid;
+       connection_init_log_prefix( op );
 
        LDAP_STAILQ_INSERT_TAIL( &op->o_conn->c_ops, op, o_next );
 
@@ -1718,13 +1705,17 @@ connection_fake_init(
        conn->c_peer_domain = slap_empty_bv;
        conn->c_peer_name = slap_empty_bv;
 
+       memset(op, 0, OPERATION_BUFFER_SIZE);
+       op->o_hdr = (Opheader *)(op+1);
+       op->o_controls = (void **)(op->o_hdr+1);
        /* set memory context */
-       op->o_tmpmemctx = slap_sl_mem_create( SLAP_SLAB_SIZE, ctx );
+       op->o_tmpmemctx = slap_sl_mem_create(SLAP_SLAB_SIZE, SLAP_SLAB_STACK, ctx);
        op->o_tmpmfuncs = &slap_sl_mfuncs;
        op->o_threadctx = ctx;
 
        op->o_conn = conn;
        op->o_connid = op->o_conn->c_connid;
+       connection_init_log_prefix( op );
 
        op->o_time = slap_get_time();
 }