mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-30 13:30:57 +08:00
BDB 4.7 patch from sleepycat to fix locking issues on single CPU systems
This commit is contained in:
parent
aa2fecc1fc
commit
0050e309f4
42
build/db.4.7.52.patch
Normal file
42
build/db.4.7.52.patch
Normal file
@ -0,0 +1,42 @@
|
||||
--- db-4.7.25/lock/lock.c.orig 2008-05-07 05:27:35.000000000 -0700
|
||||
+++ db-4.7.25/lock/lock.c 2008-09-26 11:07:15.000000000 -0700
|
||||
@@ -1274,10 +1274,12 @@
|
||||
SH_TAILQ_REMOVE(
|
||||
<->obj_tab[obj_ndx], sh_obj, links, __db_lockobj);
|
||||
if (sh_obj->lockobj.size > sizeof(sh_obj->objdata)) {
|
||||
- LOCK_REGION_LOCK(env);
|
||||
+ if (region->part_t_size != 1)
|
||||
+ LOCK_REGION_LOCK(env);
|
||||
__env_alloc_free(<->reginfo,
|
||||
SH_DBT_PTR(&sh_obj->lockobj));
|
||||
- LOCK_REGION_UNLOCK(env);
|
||||
+ if (region->part_t_size != 1)
|
||||
+ LOCK_REGION_UNLOCK(env);
|
||||
}
|
||||
SH_TAILQ_INSERT_HEAD(
|
||||
&FREE_OBJS(lt, part_id), sh_obj, links, __db_lockobj);
|
||||
@@ -1467,15 +1469,21 @@
|
||||
if (obj->size <= sizeof(sh_obj->objdata))
|
||||
p = sh_obj->objdata;
|
||||
else {
|
||||
- LOCK_REGION_LOCK(env);
|
||||
+ /*
|
||||
+ * If we have only one partition, the region is locked.
|
||||
+ */
|
||||
+ if (region->part_t_size != 1)
|
||||
+ LOCK_REGION_LOCK(env);
|
||||
if ((ret =
|
||||
__env_alloc(<->reginfo, obj->size, &p)) != 0) {
|
||||
__db_errx(env,
|
||||
"No space for lock object storage");
|
||||
- LOCK_REGION_UNLOCK(env);
|
||||
+ if (region->part_t_size != 1)
|
||||
+ LOCK_REGION_UNLOCK(env);
|
||||
goto err;
|
||||
}
|
||||
- LOCK_REGION_UNLOCK(env);
|
||||
+ if (region->part_t_size != 1)
|
||||
+ LOCK_REGION_UNLOCK(env);
|
||||
}
|
||||
|
||||
memcpy(p, obj->data, obj->size);
|
Loading…
Reference in New Issue
Block a user