1 /* porter.c - port functions of the bdb2 backend */
12 #include "back-bdb2.h"
14 #define PORTER_OBJ "bdb2_backend"
18 bdb2i_enter_backend_rw( DB_LOCK *lock, int writer )
21 db_lockmode_t lock_type;
25 switch ( slapMode & SLAP_MODE ) {
27 case SLAP_SERVER_MODE:
29 if ( ( ret = lock_id( bdb2i_dbEnv.lk_info, &locker )) != 0 ) {
31 Debug( LDAP_DEBUG_ANY,
32 "bdb2i_enter_backend(): unable to get locker id -- %s\n",
33 strerror( ret ), 0, 0 );
38 lock_type = writer ? DB_LOCK_WRITE : DB_LOCK_READ;
39 lock_dbt.data = PORTER_OBJ;
40 lock_dbt.size = strlen( PORTER_OBJ );
42 switch ( ( ret = lock_get( bdb2i_dbEnv.lk_info, locker, 0,
43 &lock_dbt, lock_type, lock ))) {
46 Debug( LDAP_DEBUG_TRACE,
47 "bdb2i_enter_backend() -- %s lock granted\n",
48 writer ? "write" : "read", 0, 0 );
51 case DB_LOCK_NOTGRANTED:
52 Debug( LDAP_DEBUG_ANY,
53 "bdb2i_enter_backend() -- %s lock NOT granted\n",
54 writer ? "write" : "read", 0, 0 );
57 case DB_LOCK_DEADLOCK:
58 Debug( LDAP_DEBUG_ANY,
59 "bdb2i_enter_backend() -- %s lock returned DEADLOCK\n",
60 writer ? "write" : "read", 0, 0 );
65 Debug( LDAP_DEBUG_ANY,
66 "bdb2i_enter_backend() -- %s lock returned ERROR: %s\n",
67 writer ? "write" : "read", strerror( ret ), 0 );
74 /* if we are a writer and we have the backend lock,
75 start transaction control */
76 if ( writer && ( ret == 0 )) {
78 ret = bdb2i_start_transction( bdb2i_dbEnv.tx_info );
87 bdb2i_leave_backend_rw( DB_LOCK lock, int writer )
89 /* since one or more error can occure,
90 we must have several return codes that are or'ed at the end */
91 int ret_transaction = 0;
94 /* if we are a writer, finish the transaction */
97 ret_transaction = bdb2i_finish_transaction();
101 /* check whether checkpointing is needed */
102 ret_transaction |= bdb2i_set_txn_checkpoint( bdb2i_dbEnv.tx_info, 0 );
104 /* now release the lock */
105 switch ( slapMode & SLAP_MODE ) {
107 case SLAP_SERVER_MODE:
109 switch( ( ret_lock = lock_put( bdb2i_dbEnv.lk_info, lock ))) {
112 Debug( LDAP_DEBUG_TRACE,
113 "bdb2i_leave_backend() -- %s lock released\n",
114 writer ? "write" : "read", 0, 0 );
117 case DB_LOCK_NOTHELD:
118 Debug( LDAP_DEBUG_ANY,
119 "bdb2i_leave_backend() -- %s lock NOT held\n",
120 writer ? "write" : "read", 0, 0 );
123 case DB_LOCK_DEADLOCK:
124 Debug( LDAP_DEBUG_ANY,
125 "bdb2i_leave_backend() -- %s lock returned DEADLOCK\n",
126 writer ? "write" : "read", 0, 0 );
131 Debug( LDAP_DEBUG_ANY,
132 "bdb2i_leave_backend() -- %s lock returned ERROR: %s\n",
133 writer ? "write" : "read", strerror( ret_lock ), 0 );
140 return( ret_transaction | ret_lock );