1 /* porter.c - port functions of the bdb2 backend */
11 #include "back-bdb2.h"
13 #define PORTER_OBJ "bdb2_backend"
17 bdb2i_enter_backend( 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 if ( ( ret = lock_id( 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( dbEnv->lk_info, locker, 0, &lock_dbt,
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 );
64 Debug( LDAP_DEBUG_ANY,
65 "bdb2i_enter_backend() -- %s lock returned ERROR: %s\n",
66 writer ? "write" : "read", strerror( errno ), 0 );
79 bdb2i_enter_backend_r( DB_ENV *dbEnv, DB_LOCK *lock )
81 return( bdb2i_enter_backend( dbEnv, lock, 0 ));
86 bdb2i_enter_backend_w( DB_ENV *dbEnv, DB_LOCK *lock )
88 return( bdb2i_enter_backend( dbEnv, lock, 1 ));
93 bdb2i_leave_backend( DB_ENV *dbEnv, DB_LOCK lock )
99 case SLAP_SERVER_MODE:
100 case SLAP_TIMEDSERVER_MODE:
102 switch( ( ret = lock_put( dbEnv->lk_info, lock ))) {
105 Debug( LDAP_DEBUG_TRACE,
106 "bdb2i_leave_backend() -- lock released\n",
110 case DB_LOCK_NOTHELD:
111 Debug( LDAP_DEBUG_ANY,
112 "bdb2i_leave_backend() -- lock NOT held\n",
116 case DB_LOCK_DEADLOCK:
117 Debug( LDAP_DEBUG_ANY,
118 "bdb2i_leave_backend() -- lock returned DEADLOCK\n",
123 Debug( LDAP_DEBUG_ANY,
124 "bdb2i_leave_backend() -- lock returned ERROR: %s\n",
125 strerror( errno ), 0, 0 );