]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/operation.c
Commit of the Proxy Cache contribution (ITS#2062)
[openldap] / servers / slapd / operation.c
index d4473c26433a7489a6f2da66ed21a2b7b8d09b50..2a8da886da336e1b588d7941c8da1bfba0274b6d 100644 (file)
@@ -1,7 +1,7 @@
 /* operation.c - routines to deal with pending ldap operations */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
 
 #include "slap.h"
 
+#ifdef LDAP_SLAPI
+#include "slapi.h"
+#endif
+
 
 void
 slap_op_free( Operation *op )
@@ -36,7 +40,27 @@ slap_op_free( Operation *op )
                ldap_controls_free( op->o_ctrls );
        }
 
-       ldap_pvt_thread_mutex_destroy( &op->o_abandonmutex );
+#ifdef LDAP_CONNECTIONLESS
+       if ( op->o_res_ber != NULL ) {
+               ber_free( op->o_res_ber, 1 );
+       }
+#endif
+#ifdef LDAP_CLIENT_UPDATE
+       if ( op->o_clientupdate_state.bv_val != NULL ) {
+               free( op->o_clientupdate_state.bv_val );
+       }
+#endif
+#ifdef LDAP_SYNC
+       if ( op->o_sync_state.bv_val != NULL ) {
+               free( op->o_sync_state.bv_val );
+       }
+#endif
+
+#if defined( LDAP_SLAPI )
+       if ( op->o_pb != NULL ) {
+               slapi_pblock_destroy( (Slapi_PBlock *)op->o_pb );
+       }
+#endif /* defined( LDAP_SLAPI ) */
 
        free( (char *) op );
 }
@@ -53,14 +77,19 @@ slap_op_alloc(
 
        op = (Operation *) ch_calloc( 1, sizeof(Operation) );
 
-       ldap_pvt_thread_mutex_init( &op->o_abandonmutex );
-
        op->o_ber = ber;
        op->o_msgid = msgid;
        op->o_tag = tag;
 
        op->o_time = slap_get_time();
        op->o_opid = id;
+#ifdef LDAP_CONNECTIONLESS
+       op->o_res_ber = NULL;
+#endif
+
+#if defined( LDAP_SLAPI )
+       op->o_pb = slapi_pblock_new();
+#endif /* defined( LDAP_SLAPI ) */
 
        return( op );
 }