diff options
Diffstat (limited to 'databases/db4/patches/patch-bb')
-rw-r--r-- | databases/db4/patches/patch-bb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/databases/db4/patches/patch-bb b/databases/db4/patches/patch-bb new file mode 100644 index 00000000000..897f88ea3c4 --- /dev/null +++ b/databases/db4/patches/patch-bb @@ -0,0 +1,44 @@ +$NetBSD: patch-bb,v 1.3 2009/01/21 15:44:32 drochner Exp $ + +--- lock/lock.c.orig 2009-01-16 19:58:31.000000000 +0100 ++++ 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); |