1 /* porter.c - port functions of the bdb2 backend */
11 #include "back-bdb2.h"
13 #define PORTER_OBJ "bdb2_backend"
15 int bdb2i_with_dbenv = 0;
19 bdb2i_enter_backend( DB_ENV *dbEnv, DB_LOCK *lock, int writer )
22 db_lockmode_t lock_type;
26 if ( !bdb2i_with_dbenv ) return( 0 );
28 if ( ( ret = lock_id( dbEnv->lk_info, &locker )) != 0 ) {
30 Debug( LDAP_DEBUG_ANY,
31 "bdb2i_enter_backend(): unable to get locker id -- %s\n",
32 strerror( ret ), 0, 0 );
37 lock_type = writer ? DB_LOCK_WRITE : DB_LOCK_READ;
38 lock_dbt.data = PORTER_OBJ;
39 lock_dbt.size = strlen( PORTER_OBJ );
41 switch ( ( ret = lock_get( dbEnv->lk_info, locker, 0, &lock_dbt,
45 Debug( LDAP_DEBUG_ANY, "bdb2i_enter_backend() -- %s lock granted\n",
46 writer ? "write" : "read", 0, 0 );
49 case DB_LOCK_NOTGRANTED:
50 Debug( LDAP_DEBUG_ANY,
51 "bdb2i_enter_backend() -- %s lock NOT granted\n",
52 writer ? "write" : "read", 0, 0 );
55 case DB_LOCK_DEADLOCK:
56 Debug( LDAP_DEBUG_ANY,
57 "bdb2i_enter_backend() -- %s lock returned DEADLOCK\n",
58 writer ? "write" : "read", 0, 0 );
62 Debug( LDAP_DEBUG_ANY,
63 "bdb2i_enter_backend() -- %s lock returned ERROR: %s\n",
64 writer ? "write" : "read", strerror( errno ), 0 );
75 bdb2i_enter_backend_r( DB_ENV *dbEnv, DB_LOCK *lock )
77 return( bdb2i_enter_backend( dbEnv, lock, 0 ));
82 bdb2i_enter_backend_w( DB_ENV *dbEnv, DB_LOCK *lock )
84 return( bdb2i_enter_backend( dbEnv, lock, 1 ));
89 bdb2i_leave_backend( DB_ENV *dbEnv, DB_LOCK lock )
93 if ( !bdb2i_with_dbenv ) return( 0 );
95 switch( ( ret = lock_put( dbEnv->lk_info, lock ))) {
98 Debug( LDAP_DEBUG_ANY, "bdb2i_leave_backend() -- lock released\n",
102 case DB_LOCK_NOTHELD:
103 Debug( LDAP_DEBUG_ANY,
104 "bdb2i_leave_backend() -- lock NOT held\n",
108 case DB_LOCK_DEADLOCK:
109 Debug( LDAP_DEBUG_ANY,
110 "bdb2i_leave_backend() -- lock returned DEADLOCK\n",
115 Debug( LDAP_DEBUG_ANY,
116 "bdb2i_leave_backend() -- lock returned ERROR: %s\n",
117 strerror( errno ), 0, 0 );