--- 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);