00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #ifndef NO_SYSTEM_INCLUDES
00013 #include <sys/types.h>
00014
00015 #include <string.h>
00016 #endif
00017
00018 #include "db_int.h"
00019 #include "dbinc/db_page.h"
00020 #include "dbinc/db_shash.h"
00021 #include "dbinc/hash.h"
00022 #include "dbinc/lock.h"
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 int
00035 __lock_cmp(dbt, lock_obj)
00036 const DBT *dbt;
00037 DB_LOCKOBJ *lock_obj;
00038 {
00039 void *obj_data;
00040
00041 obj_data = SH_DBT_PTR(&lock_obj->lockobj);
00042 return (dbt->size == lock_obj->lockobj.size &&
00043 memcmp(dbt->data, obj_data, dbt->size) == 0);
00044 }
00045
00046
00047
00048
00049 int
00050 __lock_locker_cmp(locker, sh_locker)
00051 u_int32_t locker;
00052 DB_LOCKER *sh_locker;
00053 {
00054 return (locker == sh_locker->id);
00055 }
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 #define FAST_HASH(P) { \
00078 u_int32_t __h; \
00079 u_int8_t *__cp, *__hp; \
00080 __hp = (u_int8_t *)&__h; \
00081 __cp = (u_int8_t *)(P); \
00082 __hp[0] = __cp[0] ^ __cp[4]; \
00083 __hp[1] = __cp[1] ^ __cp[5]; \
00084 __hp[2] = __cp[2] ^ __cp[6]; \
00085 __hp[3] = __cp[3] ^ __cp[7]; \
00086 return (__h); \
00087 }
00088
00089
00090
00091
00092
00093
00094 u_int32_t
00095 __lock_ohash(dbt)
00096 const DBT *dbt;
00097 {
00098 if (dbt->size == sizeof(DB_LOCK_ILOCK))
00099 FAST_HASH(dbt->data);
00100
00101 return (__ham_func5(NULL, dbt->data, dbt->size));
00102 }
00103
00104
00105
00106
00107
00108
00109 u_int32_t
00110 __lock_lhash(lock_obj)
00111 DB_LOCKOBJ *lock_obj;
00112 {
00113 void *obj_data;
00114
00115 obj_data = SH_DBT_PTR(&lock_obj->lockobj);
00116
00117 if (lock_obj->lockobj.size == sizeof(DB_LOCK_ILOCK))
00118 FAST_HASH(obj_data);
00119
00120 return (__ham_func5(NULL, obj_data, lock_obj->lockobj.size));
00121 }
00122
00123
00124
00125
00126
00127
00128
00129 int
00130 __lock_nomem(dbenv, res)
00131 DB_ENV *dbenv;
00132 const char *res;
00133 {
00134 __db_err(dbenv, "Lock table is out of available %s", res);
00135 return (ENOMEM);
00136 }