Changeset: 67773d621a58 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67773d621a58
Modified Files:
        gdk/gdk_group.c
        gdk/gdk_utils.c
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
Branch: default
Log Message:

Merge from Feb2013 branch.


diffs (247 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -64,8 +64,8 @@
  *
  * Otherwise we build a partial hash table on the fly.
  *
- * A decision should be made on the order in which grouping occurs 
- * Let |b| has << different values as |g| then the linked lists gets
+ * A decision should be made on the order in which grouping occurs Let
+ * |b| have << different values than |g| then the linked lists gets
  * extremely long, leading to a n^2 algorithm.
  * At the MAL level, the multigroup function would perform the dynamic
  * optimization.
@@ -100,8 +100,8 @@
        do {                                                            \
                TYPE *w = (TYPE *) Tloc(b, 0);                          \
                for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < q; p++) { 
\
+                       prb = hash_##TYPE(hs, &w[p]);                   \
                        if (gc) {                                       \
-                               prb = hash_##TYPE(hs, &w[p]);           \
                                for (hb = hs->hash[prb];                \
                                     hb != BUN_NONE &&                  \
                                      grps[hb - r] == grps[p - r];      \
@@ -120,12 +120,13 @@
                                        }                               \
                                }                                       \
                                if (hb != BUN_NONE &&                   \
-                                   grps[hb - r] != grps[p - r])        \
+                                   grps[hb - r] != grps[p - r]) {      \
+                                       /* we didn't assign a group */  \
+                                       /* yet */                       \
                                        hb = BUN_NONE;                  \
+                               }                                       \
                        } else if (grps) {                              \
-                               BUN hv = hash_##TYPE(hs, &w[p]);        \
-                               BUN hg = (BUN) grps[p-r];               \
-                               prb = ((hv << bits) ^ hg) & hs->mask;   \
+                               prb = ((prb << bits) ^ (BUN) grps[p-r]) & 
hs->mask; \
                                for (hb = hs->hash[prb];                \
                                     hb != BUN_NONE;                    \
                                     hb = hs->link[hb]) {               \
@@ -142,7 +143,6 @@
                                        }                               \
                                }                                       \
                        } else {                                        \
-                               prb = hash_##TYPE(hs, &w[p]);           \
                                for (hb = hs->hash[prb];                \
                                     hb != BUN_NONE;                    \
                                     hb = hs->link[hb]) {               \
@@ -502,8 +502,11 @@ BATgroup_internal(BAT **groups, BAT **ex
                                        }
                                }
                                if (hb != BUN_NONE &&
-                                   grps[hb - r] != grps[p - r])
+                                   grps[hb - r] != grps[p - r]) {
+                                       /* we didn't assign a group
+                                        * yet */
                                        hb = BUN_NONE;
+                               }
                        } else if (grps) {
                                for (;
                                     hb != BUN_NONE;
@@ -617,8 +620,8 @@ BATgroup_internal(BAT **groups, BAT **ex
                default:
                        for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < 
q; p++) {
                                v = BUNtail(bi, p);
+                               prb = hash_any(hs, v);
                                if (gc) {
-                                       prb = hash_any(hs, v);
                                        for (hb = hs->hash[prb];
                                             hb != BUN_NONE && grps[hb - r] == 
grps[p - r];
                                             hb = hs->link[hb]) {
@@ -636,12 +639,13 @@ BATgroup_internal(BAT **groups, BAT **ex
                                                }
                                        }
                                        if (hb != BUN_NONE &&
-                                           grps[hb - r] != grps[p - r])
+                                           grps[hb - r] != grps[p - r]) {
+                                               /* we didn't assign a
+                                                * group yet */
                                                hb = BUN_NONE;
+                                       }
                                } else if (grps) {
-                                       BUN hv = hash_any(hs, v);
-                                       BUN hg = (BUN) grps[p-r];
-                                       prb = ((hv << bits) ^ hg) & hs->mask;
+                                       prb = ((prb << bits) ^ (BUN) grps[p-r]) 
& hs->mask;
                                        for (hb = hs->hash[prb];
                                             hb != BUN_NONE;
                                             hb = hs->link[hb]) {
@@ -658,7 +662,6 @@ BATgroup_internal(BAT **groups, BAT **ex
                                                }
                                        }
                                } else {
-                                       prb = hash_any(hs, v);
                                        for (hb = hs->hash[prb];
                                             hb != BUN_NONE;
                                             hb = hs->link[hb]) {
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -329,7 +329,6 @@ volatile ATOMIC_TYPE GDK_nmallocs[MAX_BI
 #ifdef ATOMIC_LOCK
 static MT_Lock mbyteslock;
 static MT_Lock GDKstoppedLock;
-static MT_Lock vmtrimLock;
 #endif
 
 size_t _MT_pagesize = 0;       /* variable holding memory size */
@@ -930,13 +929,11 @@ GDKmunmap(void *addr, size_t size)
  * Their value is turned into a blanc space.
  */
 
-#define CATNAP 500
 int GDKrecovery = 0;
 
-#define VMTRIM_IDLE 0
-#define VMTRIM_BUSY 1
+#define CATNAP         50      /* time to sleep in ms for catnaps */
+
 static MT_Id GDKvmtrim_id;
-static int vmtrimStatus = VMTRIM_BUSY; /* owned by vmtrim thread */
 
 static void
 GDKvmtrim(void *limit)
@@ -946,7 +943,6 @@ GDKvmtrim(void *limit)
 
        (void) limit;
 
-       ATOMIC_INIT(vmtrimLock, "GDKvmtrim");
        do {
                int t;
                size_t rss;
@@ -954,12 +950,10 @@ GDKvmtrim(void *limit)
                size_t cursize;
 
                /* sleep using catnaps so we can exit in a timely fashion */
-               for (t = highload ? CATNAP : 10 * CATNAP; t > 0; t -= CATNAP) {
-                       /* allow GDKexit to kill GDKvmtrim thread while 
sleeping */
-                       (void) ATOMIC_COMP_SWAP(vmtrimStatus, VMTRIM_BUSY, 
VMTRIM_IDLE,vmtrimLock, "GDKvmtrim");
+               for (t = highload ? 500 : 5000; t > 0; t -= CATNAP) {
                        MT_sleep_ms(CATNAP);
-                       /* prevent from being killed while active */
-                       (void) ATOMIC_COMP_SWAP(vmtrimStatus, VMTRIM_IDLE, 
VMTRIM_BUSY, vmtrimLock, "GDKvmtrim");
+                       if (GDKexiting())
+                               return;
                }
                rss = MT_getrss();
                rssdiff = (ssize_t) rss - (ssize_t) prevrss;
@@ -1167,16 +1161,11 @@ GDKexit(int status)
 {
        MT_lock_set(&GDKthreadLock, "GDKexit");
        if (ATOMIC_COMP_SWAP(GDKstopped, 0, 1, GDKstoppedLock, "GDKexit") == 0) 
{
-               /* we have to wait for possible concurrent vmtrim actions to 
finish properly */
-               if (GDKvmtrim_id) {
-                       if (ATOMIC_GET(vmtrimStatus, vmtrimLock, "GDKexit") == 
VMTRIM_IDLE)
-                               MT_kill_thread(GDKvmtrim_id);
-                       else
-                               MT_join_thread(GDKvmtrim_id);
-               }
+               if (GDKvmtrim_id)
+                       MT_join_thread(GDKvmtrim_id);
                GDKnrofthreads = 0;
                MT_lock_unset(&GDKthreadLock, "GDKexit");
-               MT_sleep_ms(50);
+               MT_sleep_ms(CATNAP);
 
                /* Kill all threads except myself */
                if (status == 0) {
diff --git 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
--- 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
+++ 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
@@ -5,64 +5,6 @@ stderr of test 'select_from_env.SF-12407
 # 13:22:15 >  Mtimeout -timeout 180 Mserver 
"--config=/ufs/sjoerd/Monet-virgin/etc/MonetDB.conf" --debug=10 --set 
"monet_mod_path=/ufs/sjoerd/src/MonetDB/devel/sql-virgin/Linux/lib/MonetDB:/ufs/sjoerd/Monet-virgin/lib/MonetDB"
 --set "gdk_dbfarm=/ufs/sjoerd/Monet-virgin/var/MonetDB/dbfarm" --set 
"sql_logdir=/ufs/sjoerd/Monet-virgin/var/MonetDB/log" --set mapi_port=30620 
--set sql_port=47090 --set xquery_port=50410 --set monet_prompt= --trace 
"--dbname=mTests_src_test_BugDay_2005-12-19_2.9.3" 
--dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over..
 # 13:22:15 >  
 
-# builtin opt  gdk_arch = 64bitx86_64-pc-solaris2.11
-# builtin opt  gdk_version = 1.33.0
-# builtin opt  prefix = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc
-# builtin opt  exec_prefix = ${prefix}
-# builtin opt  gdk_dbname = tst
-# builtin opt  gdk_dbfarm = ${prefix}/var/MonetDB
-# builtin opt  gdk_debug = 8
-# builtin opt  gdk_alloc_map = yes
-# builtin opt  gdk_vmtrim = yes
-# builtin opt  monet_admin = adm
-# builtin opt  monet_prompt = >
-# builtin opt  monet_welcome = yes
-# builtin opt  monet_mod_path = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB
-# builtin opt  monet_daemon = yes
-# builtin opt  host = localhost
-# builtin opt  mapi_port = 50000
-# builtin opt  mapi_noheaders = no
-# builtin opt  mapi_debug = 0
-# builtin opt  mapi_clients = 2
-# builtin opt  sql_debug = 0
-# builtin opt  standoff_ns = http://monetdb.cwi.nl/standoff
-# builtin opt  standoff_start = start
-# builtin opt  standoff_end = end
-# config opt   prefix = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc
-# config opt   config = ${prefix}/etc/monetdb5.conf
-# config opt   prefix = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc
-# config opt   exec_prefix = ${prefix}
-# config opt   gdk_dbfarm = ${prefix}/var/MonetDB5/dbfarm
-# config opt   gdk_dbname = demo
-# config opt   gdk_alloc_map = no
-# config opt   gdk_embedded = no
-# config opt   gdk_debug = 0
-# config opt   monet_mod_path = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/lib:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/bin
-# config opt   monet_daemon = no
-# config opt   monet_welcome = yes
-# config opt   mero_msglog = ${prefix}/var/log/MonetDB/merovingian.log
-# config opt   mero_errlog = ${prefix}/var/log/MonetDB/merovingian.log
-# config opt   mero_pidfile = ${prefix}/var/run/MonetDB/merovingian.pid
-# config opt   mero_controlport = 50001
-# config opt   mal_init = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/mal_init.mal
-# config opt   mal_listing = 2
-# config opt   mapi_port = 50000
-# config opt   mapi_autosense = false
-# config opt   mapi_open = false
-# config opt   sql_optimizer = 
inline,remap,evaluate,costModel,coercions,emptySet,aliases,mergetable,deadcode,constants,commonTerms,joinPath,deadcode,reduce,garbageCollector,dataflow,history,replication,multiplex
-# cmdline opt  config = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/etc/monetdb5.conf
-# cmdline opt  gdk_nr_threads = 0
-# cmdline opt  monet_mod_path = 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/lib:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/bin
-# cmdline opt  gdk_dbfarm = 
/export/scratch/stripe/fabian/monetdb/current/mtest-pegasus.ins.cwi.nl/sql/dbfarm
-# cmdline opt  mapi_open = true
-# cmdline opt  xrpc_open = true
-# cmdline opt  mapi_port = 30332
-# cmdline opt  xrpc_port = 44644
-# cmdline opt  monet_prompt = 
-# cmdline opt  gdk_dbname = mTests_src_test_BugDay_2005-12-19_2.9.3
-# cmdline opt  mal_listing = 0
-#warning: please don't forget to set your vault key!
-#(see 
/export/scratch/stripe/fabian/monetdb/current/program-i86pc/etc/monetdb5.conf)
 
 # 22:29:10 >  
 # 22:29:10 >  mclient -lsql -i -umonetdb -Pmonetdb --host=pegasus --port=30332 
@@ -72,8 +14,6 @@ MAPI  = (monetdb) /var/tmp/mtest-29744/.
 QUERY = select * from env() as env where name = ( select 'prefix' from env() 
as env );
 ERROR = !cardinality violation (21>1)
 
-
-
 # 13:22:15 >  
 # 13:22:15 >  Done.
 # 13:22:15 >  
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to