Index: lock/lock.c =================================================================== RCS file: /a/CVSROOT/db/lock/lock.c,v retrieving revision 12.61 diff -c -r12.61 lock.c *** lock/lock.c 22 Jul 2008 12:08:53 -0000 12.61 --- lock/lock.c 19 Aug 2008 17:28:24 -0000 *************** *** 1278,1287 **** 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); __env_alloc_free(<->reginfo, SH_DBT_PTR(&sh_obj->lockobj)); ! LOCK_REGION_UNLOCK(env); } SH_TAILQ_INSERT_HEAD( &FREE_OBJS(lt, part_id), sh_obj, links, __db_lockobj); --- 1278,1289 ---- SH_TAILQ_REMOVE( <->obj_tab[obj_ndx], sh_obj, links, __db_lockobj); if (sh_obj->lockobj.size > sizeof(sh_obj->objdata)) { ! if (region->part_t_size != 1) ! LOCK_REGION_LOCK(env); __env_alloc_free(<->reginfo, SH_DBT_PTR(&sh_obj->lockobj)); ! if (region->part_t_size != 1) ! LOCK_REGION_UNLOCK(env); } SH_TAILQ_INSERT_HEAD( &FREE_OBJS(lt, part_id), sh_obj, links, __db_lockobj); *************** *** 1470,1484 **** if (obj->size <= sizeof(sh_obj->objdata)) p = sh_obj->objdata; else { ! 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); goto err; } ! LOCK_REGION_UNLOCK(env); } memcpy(p, obj->data, obj->size); --- 1472,1492 ---- if (obj->size <= sizeof(sh_obj->objdata)) p = sh_obj->objdata; else { ! /* ! * 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"); ! if (region->part_t_size != 1) ! LOCK_REGION_UNLOCK(env); goto err; } ! if (region->part_t_size != 1) ! LOCK_REGION_UNLOCK(env); } memcpy(p, obj->data, obj->size);