|
|
- --- a/lock/lock.c
- +++ b/lock/lock.c
- @@ -1274,10 +1274,12 @@ __lock_put_internal(lt, lockp, obj_ndx,
- 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 @@ retry: SH_TAILQ_FOREACH(sh_obj, <->obj
- 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);
|