diff --git a/build/db.4.7.52.patch b/build/db.4.7.52.patch
new file mode 100644
index 0000000000000000000000000000000000000000..96459aad8c84e8c2f4d3d7127b7c9ec36e8e8a3d
--- /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(
+ 		    &lt->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(&lt->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(&lt->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);