]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb2/porter.c
Integration of the BDB2 backend into the new init/startup/shutdown schema.
[openldap] / servers / slapd / back-bdb2 / porter.c
1 /* porter.c - port functions of the bdb2 backend */
2
3 #include "portable.h"
4
5 #include <stdio.h>
6 #include <errno.h>
7
8 #include <ac/string.h>
9
10 #include "slap.h"
11 #include "back-bdb2.h"
12
13 #define  PORTER_OBJ   "bdb2_backend"
14
15
16 static int
17 bdb2i_enter_backend( DB_ENV *dbEnv, DB_LOCK *lock, int writer )
18 {
19         u_int32_t      locker;
20         db_lockmode_t  lock_type;
21         DBT            lock_dbt;
22         int            ret;
23
24         if ( ( slapMode != SLAP_SERVER_MODE ) && ( slapMode != SLAP_TOOL_MODE ) )
25                         return( 0 );
26
27         if ( ( ret = lock_id( dbEnv->lk_info, &locker )) != 0 ) {
28
29                 Debug( LDAP_DEBUG_ANY,
30                                 "bdb2i_enter_backend(): unable to get locker id -- %s\n",
31                                 strerror( ret ), 0, 0 );
32                 return( ret );
33
34         }
35
36         lock_type     = writer ? DB_LOCK_WRITE : DB_LOCK_READ;
37         lock_dbt.data = PORTER_OBJ;
38         lock_dbt.size = strlen( PORTER_OBJ );
39
40         switch ( ( ret = lock_get( dbEnv->lk_info, locker, 0, &lock_dbt,
41                                         lock_type, lock ))) {
42
43                 case 0:
44                         Debug( LDAP_DEBUG_TRACE, "bdb2i_enter_backend() -- %s lock granted\n",
45                                                 writer ? "write" : "read", 0, 0 );
46                         break;
47
48                 case DB_LOCK_NOTGRANTED:
49                         Debug( LDAP_DEBUG_ANY,
50                                                 "bdb2i_enter_backend() -- %s lock NOT granted\n",
51                                                 writer ? "write" : "read", 0, 0 );
52                         break;
53
54                 case DB_LOCK_DEADLOCK:
55                         Debug( LDAP_DEBUG_ANY,
56                                                 "bdb2i_enter_backend() -- %s lock returned DEADLOCK\n",
57                                                 writer ? "write" : "read", 0, 0 );
58                         break;
59
60                 default:
61                         Debug( LDAP_DEBUG_ANY,
62                                                 "bdb2i_enter_backend() -- %s lock returned ERROR: %s\n",
63                                                 writer ? "write" : "read", strerror( errno ), 0 );
64                         ret = errno;
65                         break;
66                         
67         }
68
69         return( ret );
70 }
71
72
73 int
74 bdb2i_enter_backend_r( DB_ENV *dbEnv, DB_LOCK *lock )
75 {
76         return( bdb2i_enter_backend( dbEnv, lock, 0 ));
77 }
78
79
80 int
81 bdb2i_enter_backend_w( DB_ENV *dbEnv, DB_LOCK *lock )
82 {
83         return( bdb2i_enter_backend( dbEnv, lock, 1 ));
84 }
85
86
87 int
88 bdb2i_leave_backend( DB_ENV *dbEnv, DB_LOCK lock )
89 {
90         int   ret;
91
92         if ( ( slapMode != SLAP_SERVER_MODE ) && ( slapMode != SLAP_TOOL_MODE ) )
93                         return( 0 );
94
95         switch( ( ret = lock_put( dbEnv->lk_info, lock ))) {
96
97                 case 0:
98                         Debug( LDAP_DEBUG_TRACE, "bdb2i_leave_backend() -- lock released\n",
99                                                 0, 0, 0 );
100                         break;
101
102                 case DB_LOCK_NOTHELD:
103                         Debug( LDAP_DEBUG_ANY,
104                                                 "bdb2i_leave_backend() -- lock NOT held\n",
105                                                 0, 0, 0 );
106                         break;
107
108                 case DB_LOCK_DEADLOCK:
109                         Debug( LDAP_DEBUG_ANY,
110                                                 "bdb2i_leave_backend() -- lock returned DEADLOCK\n",
111                                                 0, 0, 0 );
112                         break;
113
114                 default:
115                         Debug( LDAP_DEBUG_ANY,
116                                                 "bdb2i_leave_backend() -- lock returned ERROR: %s\n",
117                                                 strerror( errno ), 0, 0 );
118                         ret = errno;
119                         break;
120                         
121         }
122
123         return( ret );
124
125 }
126
127