1 /* porter.c - port functions of the bdb2 backend */
11 #include "back-bdb2.h"
13 #define PORTER_OBJ "bdb2_backend"
17 bdb2i_enter_backend_rw( DB_ENV *dbEnv, DB_LOCK *lock, int writer )
20 db_lockmode_t lock_type;
26 case SLAP_SERVER_MODE:
27 case SLAP_TIMEDSERVER_MODE:
29 case SLAP_TOOLID_MODE:
30 if ( ( ret = lock_id( dbEnv->lk_info, &locker )) != 0 ) {
32 Debug( LDAP_DEBUG_ANY,
33 "bdb2i_enter_backend(): unable to get locker id -- %s\n",
34 strerror( ret ), 0, 0 );
39 lock_type = writer ? DB_LOCK_WRITE : DB_LOCK_READ;
40 lock_dbt.data = PORTER_OBJ;
41 lock_dbt.size = strlen( PORTER_OBJ );
43 switch ( ( ret = lock_get( dbEnv->lk_info, locker, 0, &lock_dbt,
47 Debug( LDAP_DEBUG_TRACE,
48 "bdb2i_enter_backend() -- %s lock granted\n",
49 writer ? "write" : "read", 0, 0 );
52 case DB_LOCK_NOTGRANTED:
53 Debug( LDAP_DEBUG_ANY,
54 "bdb2i_enter_backend() -- %s lock NOT granted\n",
55 writer ? "write" : "read", 0, 0 );
58 case DB_LOCK_DEADLOCK:
59 Debug( LDAP_DEBUG_ANY,
60 "bdb2i_enter_backend() -- %s lock returned DEADLOCK\n",
61 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( errno ), 0 );
75 /* if we are a writer and we have the backend lock,
76 start transaction control */
77 if ( writer && ( ret == 0 )) {
79 ret = bdb2i_start_transction( dbEnv->tx_info );
88 bdb2i_leave_backend_rw( DB_ENV *dbEnv, DB_LOCK lock, int writer )
90 /* since one or more error can occure,
91 we must have several return codes that are or'ed at the end */
92 int ret_transaction = 0;
96 /* if we are a writer, finish the transaction */
99 ret_transaction = bdb2i_finish_transaction();
103 /* check whether checkpointing is needed */
104 ret_transaction |= bdb2i_set_txn_checkpoint( dbEnv->tx_info, 0 );
106 /* now release the lock */
107 switch ( slapMode ) {
109 case SLAP_SERVER_MODE:
110 case SLAP_TIMEDSERVER_MODE:
112 case SLAP_TOOLID_MODE:
113 switch( ( ret_lock = lock_put( dbEnv->lk_info, lock ))) {
116 Debug( LDAP_DEBUG_TRACE,
117 "bdb2i_leave_backend() -- %s lock released\n",
118 writer ? "write" : "read", 0, 0 );
121 case DB_LOCK_NOTHELD:
122 Debug( LDAP_DEBUG_ANY,
123 "bdb2i_leave_backend() -- %s lock NOT held\n",
124 writer ? "write" : "read", 0, 0 );
127 case DB_LOCK_DEADLOCK:
128 Debug( LDAP_DEBUG_ANY,
129 "bdb2i_leave_backend() -- %s lock returned DEADLOCK\n",
130 writer ? "write" : "read", 0, 0 );
134 Debug( LDAP_DEBUG_ANY,
135 "bdb2i_leave_backend() -- %s lock returned ERROR: %s\n",
136 writer ? "write" : "read", strerror( errno ), 0 );
144 return( ret_transaction | ret_lock );