From: Quanah Gibson-Mount Date: Thu, 2 Oct 2008 18:28:11 +0000 (+0000) Subject: BDB 4.7 patch from sleepycat to fix locking issues on single CPU systems X-Git-Tag: OPENLDAP_REL_ENG_2_4_12~14 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=1d206c99762bd6559c67a6ab8a16f09966d796d1;p=openldap BDB 4.7 patch from sleepycat to fix locking issues on single CPU systems --- diff --git a/build/db.4.7.52.patch b/build/db.4.7.52.patch new file mode 100644 index 0000000000..96459aad8c --- /dev/null +++ b/build/db.4.7.52.patch @@ -0,0 +1,42 @@ +--- 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);