Changeset: a11cec59c809 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a11cec59c809
Modified Files:
        clients/R/Tests/install-dependencies.sh
        gdk/gdk_bbp.c
Branch: default
Log Message:

Merge with Oct2014 branch.


diffs (80 lines):

diff --git a/clients/R/Tests/install-dependencies.sh 
b/clients/R/Tests/install-dependencies.sh
--- a/clients/R/Tests/install-dependencies.sh
+++ b/clients/R/Tests/install-dependencies.sh
@@ -1,2 +1,2 @@
 #!/bin/sh
-R --vanilla --quiet -e 
"install.packages(c('dplyr','sqlsurvey','DBI','digest'),repos=c('http://r-forge.r-project.org','http://cran.rstudio.com/'),type='source')"
+R --vanilla --quiet -e 
"install.packages(c('dplyr','survey','sqlsurvey','DBI','digest','Lahman'),repos=c('http://download.r-forge.r-project.org','http://cran.rstudio.com/'),type='source')"
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1710,6 +1710,47 @@ BBPcurstamp(void)
        return ATOMIC_GET(BBP_curstamp, BBP_curstampLock, "BBPcurstamp") & 
0x7fffffff;
 }
 
+/* There are BBP_THREADMASK+1 (64) free lists, and ours (idx) is
+ * empty.  Here we find the longest free list, and if it is long
+ * enough (> 20 entries) we take one entry from that list.  If the
+ * longest list isn't long enough, we create a new entry by either
+ * just increasing BBPsize (up to BBPlimit) or extending the BBP
+ * (which increases BBPlimit). */
+static void
+maybeextend(int idx)
+{
+       int t, m;
+       int n, l;
+       bat i;
+
+       l = 0;                  /* length of longest list */
+       m = 0;                  /* index of longest list */
+       /* find longest free list */
+       for (t = 0; t <= BBP_THREADMASK; t++) {
+               n = 0;
+               for (i = BBP_free(t); i != 0; i = BBP_next(i))
+                       n++;
+               if (n > l) {
+                       m = t;
+                       l = n;
+               }
+       }
+       if (l > 20) {
+               /* longest list is long enough, get an entry from there */
+               i = BBP_free(m);
+               BBP_free(m) = BBP_next(i);
+               BBP_next(i) = 0;
+               BBP_free(idx) = i;
+       } else {
+               /* let the longest list alone, get a fresh entry */
+               if ((bat) ATOMIC_ADD(BBPsize, 1, BBPsizeLock, "BBPinsert") >= 
BBPlimit) {
+                       BBPextend(idx, TRUE);
+               } else {
+                       BBP_free(idx) = (bat) ATOMIC_GET(BBPsize, BBPsizeLock, 
"BBPinsert") - 1;
+               }
+       }
+}
+
 bat
 BBPinsert(BATstore *bs)
 {
@@ -1746,11 +1787,7 @@ BBPinsert(BATstore *bs)
                /* check again in case some other thread extended
                 * while we were waiting */
                if (BBP_free(idx) <= 0) {
-                       if ((bat) ATOMIC_ADD(BBPsize, 1, BBPsizeLock, 
"BBPinsert") >= BBPlimit) {
-                               BBPextend(idx, TRUE);
-                       } else {
-                               BBP_free(idx) = (bat) ATOMIC_GET(BBPsize, 
BBPsizeLock, "BBPinsert") - 1;
-                       }
+                       maybeextend(idx);
                }
                MT_lock_unset(&GDKnameLock, "BBPinsert");
                if (lock)
@@ -1760,7 +1797,7 @@ BBPinsert(BATstore *bs)
        }
        i = BBP_free(idx);
        assert(i > 0);
-       BBP_free(idx) = BBP_next(BBP_free(idx));
+       BBP_free(idx) = BBP_next(i);
 
        if (lock) {
                MT_lock_unset(&GDKcacheLock(idx), "BBPinsert");
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to