apr: moved to github
[openwrt.org/packages.git] / libs / 002-lock.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
diff -urN db-4.7.25.NC/lock/lock.c db-4.7.25.NC.new/lock/lock.c
--- db-4.7.25.NC/lock/lock.c    2008-05-07 14:27:35.000000000 +0200
+++ db-4.7.25.NC.new/lock/lock.c        2009-11-08 12:52:19.000000000 +0100
@@ -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);
 
comments