Update of /cvsroot/fink/dists/10.4/unstable/crypto/finkinfo
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7068

Modified Files:
        db47-aes.info db47-aes.patch 
Log Message:
Added new upstream patch.

Index: db47-aes.info
===================================================================
RCS file: /cvsroot/fink/dists/10.4/unstable/crypto/finkinfo/db47-aes.info,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- db47-aes.info       30 Nov 2008 21:19:32 -0000      1.1
+++ db47-aes.info       28 Jan 2009 16:14:08 -0000      1.2
@@ -1,6 +1,6 @@
 Package: db47-aes
 Version: 4.7.25
-Revision: 1
+Revision: 2
 CustomMirror: <<
 nam-US: http://download-east.oracle.com/berkeley-db/
 nam-US: http://download-west.oracle.com/berkeley-db/
@@ -17,7 +17,7 @@
 SetCFlags: -Os
 SetCXXFlags: -Os
 PatchFile: %n.patch
-PatchFile-MD5: 65fcf99138b2de4fb7303ee943710d00
+PatchFile-MD5: 8c7011b31f9c71c8f97d09d821aca079
 ConfigureParams: --enable-compat185 --enable-cxx --enable-dump185 
--includedir=%p/include/db4
 GCC: 4.0
 CompileScript: <<

Index: db47-aes.patch
===================================================================
RCS file: /cvsroot/fink/dists/10.4/unstable/crypto/finkinfo/db47-aes.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- db47-aes.patch      30 Nov 2008 19:16:21 -0000      1.1
+++ db47-aes.patch      28 Jan 2009 16:14:08 -0000      1.2
@@ -1,6 +1,261 @@
+diff -ru db-4.7.25.orig/lock/lock.c db-4.7.25/lock/lock.c
+--- db-4.7.25.orig/lock/lock.c 2008-05-07 08:27:35.000000000 -0400
++++ db-4.7.25/lock/lock.c      2009-01-28 10:55:09.000000000 -0500
+@@ -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);
+diff -ru db-4.7.25.orig/lock/lock_deadlock.c db-4.7.25/lock/lock_deadlock.c
+--- db-4.7.25.orig/lock/lock_deadlock.c        2008-03-10 09:31:33.000000000 
-0400
++++ db-4.7.25/lock/lock_deadlock.c     2009-01-28 10:55:39.000000000 -0500
+@@ -121,7 +121,7 @@
+       DB_LOCKTAB *lt;
+       db_timespec now;
+       locker_info *idmap;
+-      u_int32_t *bitmap, *copymap, **deadp, **free_me, *tmpmap;
++      u_int32_t *bitmap, *copymap, **deadp, **deadlist, *tmpmap;
+       u_int32_t i, cid, keeper, killid, limit, nalloc, nlockers;
+       u_int32_t lock_max, txn_max;
+       int ret, status;
+@@ -133,7 +133,8 @@
+       if (IS_REP_CLIENT(env))
+               atype = DB_LOCK_MINWRITE;
+ 
+-      free_me = NULL;
++      copymap = tmpmap = NULL;
++      deadlist = NULL;
+ 
+       lt = env->lk_handle;
+       if (rejectp != NULL)
+@@ -179,11 +180,11 @@
+       memcpy(copymap, bitmap, nlockers * sizeof(u_int32_t) * nalloc);
+ 
+       if ((ret = __os_calloc(env, sizeof(u_int32_t), nalloc, &tmpmap)) != 0)
+-              goto err1;
++              goto err;
+ 
+       /* Find a deadlock. */
+       if ((ret =
+-          __dd_find(env, bitmap, idmap, nlockers, nalloc, &deadp)) != 0)
++          __dd_find(env, bitmap, idmap, nlockers, nalloc, &deadlist)) != 0)
+               return (ret);
+ 
+       /*
+@@ -204,8 +205,7 @@
+               txn_max = TXN_MAXIMUM;
+ 
+       killid = BAD_KILLID;
+-      free_me = deadp;
+-      for (; *deadp != NULL; deadp++) {
++      for (deadp = deadlist; *deadp != NULL; deadp++) {
+               if (rejectp != NULL)
+                       ++*rejectp;
+               killid = (u_int32_t)(*deadp - bitmap) / nalloc;
+@@ -342,11 +342,12 @@
+                       __db_msg(env,
+                           "Aborting locker %lx", (u_long)idmap[killid].id);
+       }
+-      __os_free(env, tmpmap);
+-err1: __os_free(env, copymap);
+-
+-err:  if (free_me != NULL)
+-              __os_free(env, free_me);
++err:  if(copymap != NULL)
++              __os_free(env, copymap);
++      if (deadlist != NULL)
++              __os_free(env, deadlist);
++      if(tmpmap != NULL)
++              __os_free(env, tmpmap);
+       __os_free(env, bitmap);
+       __os_free(env, idmap);
+ 
+@@ -360,6 +361,17 @@
+ 
+ #define       DD_INVALID_ID   ((u_int32_t) -1)
+ 
++/*
++ * __dd_build --
++ *    Build the lock dependency bit maps.
++ * Notes on syncronization:  
++ *    LOCK_SYSTEM_LOCK is used to hold objects locked when we have
++ *            a single partition.
++ *    LOCK_LOCKERS is held while we are walking the lockers list and
++ *            to single thread the use of lockerp->dd_id.
++ *    LOCK_DD protects the DD list of objects.
++ */
++
+ static int
+ __dd_build(env, atype, bmp, nlockers, allocp, idmap, rejectp)
+       ENV *env;
+@@ -393,6 +405,7 @@
+        * In particular we do not build the conflict array and our caller
+        * needs to expect this.
+        */
++      LOCK_SYSTEM_LOCK(lt, region);
+       if (atype == DB_LOCK_EXPIRE) {
+ skip:         LOCK_DD(env, region);
+               op = SH_TAILQ_FIRST(&region->dd_objs, __db_lockobj);
+@@ -430,17 +443,18 @@
+                       OBJECT_UNLOCK(lt, region, indx);
+               }
+               UNLOCK_DD(env, region);
++              LOCK_SYSTEM_UNLOCK(lt, region);
+               goto done;
+       }
+ 
+       /*
+-       * We'll check how many lockers there are, add a few more in for
+-       * good measure and then allocate all the structures.  Then we'll
+-       * verify that we have enough room when we go back in and get the
+-       * mutex the second time.
++       * Allocate after locking the region
++       * to make sure the structures are large enough.
+        */
+-retry:        count = region->stat.st_nlockers;
++      LOCK_LOCKERS(env, region);
++      count = region->stat.st_nlockers;
+       if (count == 0) {
++              UNLOCK_LOCKERS(env, region);
+               *nlockers = 0;
+               return (0);
+       }
+@@ -448,50 +462,37 @@
+       if (FLD_ISSET(env->dbenv->verbose, DB_VERB_DEADLOCK))
+               __db_msg(env, "%lu lockers", (u_long)count);
+ 
+-      count += 20;
+       nentries = (u_int32_t)DB_ALIGN(count, 32) / 32;
+ 
+-      /*
+-       * Allocate enough space for a count by count bitmap matrix.
+-       *
+-       * XXX
+-       * We can probably save the malloc's between iterations just
+-       * reallocing if necessary because count grew by too much.
+-       */
++      /* Allocate enough space for a count by count bitmap matrix. */
+       if ((ret = __os_calloc(env, (size_t)count,
+-          sizeof(u_int32_t) * nentries, &bitmap)) != 0)
++          sizeof(u_int32_t) * nentries, &bitmap)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               return (ret);
++      }
+ 
+       if ((ret = __os_calloc(env,
+           sizeof(u_int32_t), nentries, &tmpmap)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               __os_free(env, bitmap);
+               return (ret);
+       }
+ 
+       if ((ret = __os_calloc(env,
+           (size_t)count, sizeof(locker_info), &id_array)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               __os_free(env, bitmap);
+               __os_free(env, tmpmap);
+               return (ret);
+       }
+ 
+       /*
+-       * Now go back in and actually fill in the matrix.
+-       */
+-      if (region->stat.st_nlockers > count) {
+-              __os_free(env, bitmap);
+-              __os_free(env, tmpmap);
+-              __os_free(env, id_array);
+-              goto retry;
+-      }
+-
+-      /*
+        * First we go through and assign each locker a deadlock detector id.
+        */
+       id = 0;
+-      LOCK_LOCKERS(env, region);
+       SH_TAILQ_FOREACH(lip, &region->lockers, ulinks, __db_locker) {
+               if (lip->master_locker == INVALID_ROFF) {
++                      DB_ASSERT(env, id < count);
+                       lip->dd_id = id++;
+                       id_array[lip->dd_id].id = lip->id;
+                       switch (atype) {
+@@ -510,7 +511,6 @@
+                       lip->dd_id = DD_INVALID_ID;
+ 
+       }
+-      UNLOCK_LOCKERS(env, region);
+ 
+       /*
+        * We only need consider objects that have waiters, so we use
+@@ -669,7 +669,6 @@
+        * status after building the bit maps so that we will not detect
+        * a blocked transaction without noting that it is already aborting.
+        */
+-      LOCK_LOCKERS(env, region);
+       for (id = 0; id < count; id++) {
+               if (!id_array[id].valid)
+                       continue;
+@@ -738,6 +737,7 @@
+                       id_array[id].in_abort = 1;
+       }
+       UNLOCK_LOCKERS(env, region);
++      LOCK_SYSTEM_UNLOCK(lt, region);
+ 
+       /*
+        * Now we can release everything except the bitmap matrix that we
+@@ -839,6 +839,7 @@
+       ret = 0;
+ 
+       /* We must lock so this locker cannot go away while we abort it. */
++      LOCK_SYSTEM_LOCK(lt, region);
+       LOCK_LOCKERS(env, region);
+ 
+       /*
+@@ -895,6 +896,7 @@
+ done: OBJECT_UNLOCK(lt, region, info->last_ndx);
+ err:
+ out:  UNLOCK_LOCKERS(env, region);
++      LOCK_SYSTEM_UNLOCK(lt, region);
+       return (ret);
+ }
+ 
 diff -ru db-4.7.25.orig/sequence/sequence.c db-4.7.25/sequence/sequence.c
 --- db-4.7.25.orig/sequence/sequence.c 2008-05-05 16:25:09.000000000 -0400
-+++ db-4.7.25/sequence/sequence.c      2008-11-30 11:58:22.000000000 -0500
++++ db-4.7.25/sequence/sequence.c      2009-01-28 10:54:52.000000000 -0500
 @@ -187,7 +187,11 @@
        if ((ret = __db_get_flags(dbp, &tflags)) != 0)
                goto err;


------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Fink-commits mailing list
[email protected]
http://news.gmane.org/gmane.os.apple.fink.cvs

Reply via email to