Changeset: fe22eeb7284e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe22eeb7284e
Modified Files:
        clients/R/Tests/install-dependencies.sh
        gdk/gdk_bbp.c
        gdk/gdk_imprints.c
        sql/backends/monet5/datacell/petrinet.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_scenario.h
Branch: Oct2014
Log Message:

merged


diffs (180 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
@@ -1702,6 +1702,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)
 {
@@ -1738,11 +1779,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)
@@ -1752,7 +1789,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");
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -412,7 +412,7 @@ do {                                                        
                \
        uint##B##_t *im = (uint##B##_t *) imps;                         \
        TYPE *col = (TYPE *) Tloc(b, b->batFirst);                      \
        TYPE *bins = (TYPE *) inbins;                                   \
-       TYPE nil = TYPE##_nil;                                                  
\
+       TYPE nil = TYPE##_nil;                                          \
        prvmask = mask = 0;                                             \
        new = (IMPS_PAGE/sizeof(TYPE))-1;                               \
        for (i = 0; i < b->batCount; i++) {                             \
@@ -453,23 +453,23 @@ do {                                                      
                \
                }                                                       \
                GETBIN##B(bin,col[i]);                                  \
                mask = IMPSsetBit(B,mask,bin);                          \
-               if (!cnt_bins[bin]++) {                                         
\
+               if (!cnt_bins[bin]++) {                                 \
                        min_bins[bin] = max_bins[bin] = i;              \
-               } else {                                                        
                \
+               } else {                                                \
                        /* nil value can not be min */                  \
-                       if ((bin == 0) && (col[i] != nil)) {                    
                \
-                               /* in case the first value was nil and 
min_bin[0]       \
-                                * has been initialized with it */              
                        \
-                               if (col[min_bins[0]] == nil) {                  
                        \
-                                       min_bins[0] = i;                        
                                        \
-                               } else if (col[i] < col[min_bins[0]]) {         
                \
-                                       min_bins[0] = i;                        
                                        \
-                               }                                               
                                                        \
-                       } else  {                                               
                                                \
-                               if (col[i] < col[min_bins[bin]]) min_bins[bin] 
= i;     \
-                       }                                                       
                                                        \
-                       if (col[i] > col[max_bins[bin]]) max_bins[bin] = i;     
        \
-               }                                                               
                                                \
+                       if ((bin == 0) && (col[i] != nil)) {            \
+                               /* in case the first value was nil and 
min_bin[0] \
+                                * has been initialized with it */      \
+                               if (col[min_bins[0]] == nil) {          \
+                                       min_bins[0] = i;                \
+                               } else if (col[i] < col[min_bins[0]]) { \
+                                       min_bins[0] = i;                \
+                               }                                       \
+                       } else  {                                       \
+                               if (col[i] < col[min_bins[bin]]) min_bins[bin] 
= i; \
+                       }                                               \
+                       if (col[i] > col[max_bins[bin]]) max_bins[bin] = i; \
+               }                                                       \
        }                                                               \
        /* one last left */                                             \
        if (prvmask == mask && dcnt > 0 &&                              \
diff --git a/sql/backends/monet5/datacell/petrinet.c 
b/sql/backends/monet5/datacell/petrinet.c
--- a/sql/backends/monet5/datacell/petrinet.c
+++ b/sql/backends/monet5/datacell/petrinet.c
@@ -474,7 +474,7 @@ PNcontroller(void *dummy)
 
        cntxt = mal_clients; /* run as admin in SQL mode*/
         if( strcmp(cntxt->scenario, "sql") )
-               SQLinitEnvironment(cntxt);
+                SQLinitEnvironment(cntxt, NULL, NULL, NULL);
        /* At this point we know what is the total number of factories.
         * The most extremely case is when ALL factories are enable to fire
         * so the maximum space we could ever need is = #factories (=pnettop)*/
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1320,8 +1320,11 @@ SQLexitClient(Client c)
  * execution
  */
 str
-SQLinitEnvironment(Client cntxt)
+SQLinitEnvironment(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
+       (void) mb;
+       (void) stk;
+       (void) pci;
        return SQLinitClient(cntxt);
 }
 
@@ -1371,7 +1374,7 @@ SQLstatementIntern(Client c, str *expr, 
        mnstr_printf(c->fdout, "#SQLstatement:%s\n", *expr);
 #endif
        if (!sql) {
-               msg = SQLinitEnvironment(c);
+               msg = SQLinitEnvironment(c, NULL, NULL, NULL);
                sql = (backend *) c->sqlcontext;
        }
        if (msg){
diff --git a/sql/backends/monet5/sql_scenario.h 
b/sql/backends/monet5/sql_scenario.h
--- a/sql/backends/monet5/sql_scenario.h
+++ b/sql/backends/monet5/sql_scenario.h
@@ -41,7 +41,7 @@ sql5_export str SQLassertInt(Client cntx
 sql5_export str SQLassertWrd(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLassertLng(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
-sql5_export str SQLinitEnvironment(Client cntxt);
+sql5_export str SQLinitEnvironment(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLstatementIntern(Client c, str *expr, str nme, int execute, 
bit output);
 sql5_export str SQLcompile(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to