1 --- db-4.7.25/lock/lock.c.orig 2008-05-07 05:27:35.000000000 -0700
2 +++ db-4.7.25/lock/lock.c 2008-09-26 11:07:15.000000000 -0700
3 @@ -1274,10 +1274,12 @@
5 <->obj_tab[obj_ndx], sh_obj, links, __db_lockobj);
6 if (sh_obj->lockobj.size > sizeof(sh_obj->objdata)) {
7 - LOCK_REGION_LOCK(env);
8 + if (region->part_t_size != 1)
9 + LOCK_REGION_LOCK(env);
10 __env_alloc_free(<->reginfo,
11 SH_DBT_PTR(&sh_obj->lockobj));
12 - LOCK_REGION_UNLOCK(env);
13 + if (region->part_t_size != 1)
14 + LOCK_REGION_UNLOCK(env);
17 &FREE_OBJS(lt, part_id), sh_obj, links, __db_lockobj);
18 @@ -1467,15 +1469,21 @@
19 if (obj->size <= sizeof(sh_obj->objdata))
22 - LOCK_REGION_LOCK(env);
24 + * If we have only one partition, the region is locked.
26 + if (region->part_t_size != 1)
27 + LOCK_REGION_LOCK(env);
29 __env_alloc(<->reginfo, obj->size, &p)) != 0) {
31 "No space for lock object storage");
32 - LOCK_REGION_UNLOCK(env);
33 + if (region->part_t_size != 1)
34 + LOCK_REGION_UNLOCK(env);
37 - LOCK_REGION_UNLOCK(env);
38 + if (region->part_t_size != 1)
39 + LOCK_REGION_UNLOCK(env);
42 memcpy(p, obj->data, obj->size);