1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1997, 1998, 1999, 2000
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
static const char revid[] = "$Id: cxx_lock.cpp,v 11.9 2000/09/21 15:05:45 dda Exp $";
#endif /* not lint */
#include <errno.h>
#include <string.h>
#include "db_cxx.h"
#include "cxx_int.h"
int DbEnv::lock_detect(u_int32_t flags, u_int32_t atype, int *aborted)
{
DB_ENV *env = unwrap(this);
int err;
if ((err = ::lock_detect(env, flags, atype, aborted)) != 0) {
DB_ERROR("DbEnv::lock_detect", err, error_policy());
return (err);
}
return (err);
}
int DbEnv::lock_get(u_int32_t locker, u_int32_t flags, const Dbt *obj,
db_lockmode_t lock_mode, DbLock *lock)
{
DB_ENV *env = unwrap(this);
int err;
if ((err = ::lock_get(env, locker, flags, obj,
lock_mode, &lock->lock_)) != 0) {
DB_ERROR("DbEnv::lock_get", err, error_policy());
return (err);
}
return (err);
}
int DbEnv::lock_id(u_int32_t *idp)
{
DB_ENV *env = unwrap(this);
int err;
if ((err = ::lock_id(env, idp)) != 0) {
DB_ERROR("DbEnv::lock_id", err, error_policy());
}
return (err);
}
int DbEnv::lock_stat(DB_LOCK_STAT **statp,
db_malloc_fcn_type db_malloc_fcn)
{
DB_ENV *env = unwrap(this);
int err;
if ((err = ::lock_stat(env, statp, db_malloc_fcn)) != 0) {
DB_ERROR("DbEnv::lock_stat", err, error_policy());
return (err);
}
return (0);
}
int DbEnv::lock_vec(u_int32_t locker, u_int32_t flags,
DB_LOCKREQ list[],
int nlist, DB_LOCKREQ **elist_returned)
{
DB_ENV *env = unwrap(this);
int err;
if ((err = ::lock_vec(env, locker, flags, list,
nlist, elist_returned)) != 0) {
DB_ERROR("DbEnv::lock_vec", err, error_policy());
return (err);
}
return (err);
}
////////////////////////////////////////////////////////////////////////
// //
// DbLock //
// //
////////////////////////////////////////////////////////////////////////
DbLock::DbLock(DB_LOCK value)
: lock_(value)
{
}
DbLock::DbLock()
{
memset(&lock_, 0, sizeof(DB_LOCK));
}
DbLock::DbLock(const DbLock &that)
: lock_(that.lock_)
{
}
DbLock &DbLock::operator = (const DbLock &that)
{
lock_ = that.lock_;
return (*this);
}
int DbLock::put(DbEnv *env)
{
DB_ENV *envp = unwrap(env);
if (!env) {
return (EINVAL); // handle never assigned
}
int err;
if ((err = lock_put(envp, &lock_)) != 0) {
DB_ERROR("DbLock::put", err, env->error_policy());
}
return (err);
}
|