cxx_lock.cpp
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

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