mariadb/bdb/cxx/cxx_lock.cpp

126 lines
2.6 KiB
C++
Raw Normal View History

2001-03-05 01:42:05 +01:00
/*-
* 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);
}