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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list