Changeset: 751ee163c711 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/751ee163c711
Modified Files:
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_runtime.c
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/groupby.c
        monetdb5/modules/mal/mal_io.c
        sql/backends/monet5/sql.c
        sql/test/emptydb/Tests/check.stable.out.32bit
Branch: default
Log Message:

Merged with Jul2021


diffs (truncated from 679 to 300 lines):

diff --git a/gdk/gdk_tm.c b/gdk/gdk_tm.c
--- a/gdk/gdk_tm.c
+++ b/gdk/gdk_tm.c
@@ -63,9 +63,11 @@ prelude(int cnt, bat *restrict subcommit
                                        return GDK_FAIL;
                        }
                        if (b) {
+                               MT_lock_set(&b->theaplock);
                                assert(!isVIEW(b));
                                assert(b->batRole == PERSISTENT);
                                BATcommit(b, sizes ? sizes[i] : BUN_NONE);
+                               MT_lock_unset(&b->theaplock);
                        }
                }
        }
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -954,13 +954,17 @@ getDiskSpace(void)
                        b = BATdescriptor(i);
                        if (b) {
                                size += sizeof(BAT);
+
+                               MT_lock_set(&b->theaplock);
                                if (!isVIEW(b)) {
                                        BUN cnt = BATcount(b);
 
-                                       size += tailsize(b, cnt);
                                        /* the upperbound is used for the heaps 
*/
                                        if (b->tvheap)
                                                size += HEAPvmsize(b->tvheap);
+                                       MT_lock_unset(&b->theaplock);
+
+                                       size += tailsize(b, cnt);
                                        if (b->thash)
                                                size += sizeof(BUN) * cnt;
                                        /* also add the size of an imprint, 
ordered index or mosaic */
@@ -968,6 +972,8 @@ getDiskSpace(void)
                                                size += IMPSimprintsize(b);
                                        if(b->torderidx)
                                                size += 
HEAPvmsize(b->torderidx);
+                               } else {
+                                       MT_lock_unset(&b->theaplock);
                                }
                                BBPunfix(i);
                        }
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -464,7 +464,9 @@ getBatSpace(BAT *b){
                return 0;
        space += BATcount(b) << b->tshift;
        if( space){
+               MT_lock_set(&b->theaplock);
                if( b->tvheap) space += heapinfo(b->tvheap, b->batCacheid);
+               MT_lock_unset(&b->theaplock);
                MT_rwlock_rdlock(&b->thashlock);
                space += hashinfo(b->thash, b->batCacheid);
                MT_rwlock_rdunlock(&b->thashlock);
diff --git a/monetdb5/modules/kernel/algebra.c 
b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -1099,7 +1099,7 @@ ALGsubslice_lng(bat *ret, const bat *bid
        if (*start < 0 || *start > (lng) BUN_MAX ||
                (*end < 0 && !is_lng_nil(*end)) || *end >= (lng) BUN_MAX)
                throw(MAL, "algebra.subslice", ILLEGAL_ARGUMENT);
-       if ((b = BATdescriptor(*bid)) == NULL)
+       if ((b = BBPquickdesc(*bid)) == NULL)
                throw(MAL, "algebra.subslice", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        s = (BUN) *start;
        if (s > BATcount(b))
@@ -1110,7 +1110,6 @@ ALGsubslice_lng(bat *ret, const bat *bid
        if (e < s)
                e = s;
        bn = BATdense(0, b->hseqbase + s, e - s);
-       BBPunfix(*bid);
        if (bn == NULL)
                throw(MAL, "algebra.subslice", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        *ret = bn->batCacheid;
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -572,14 +572,20 @@ BKCgetSize(lng *tot, const bat *bid){
        }
 
        size = sizeof (bat);
+
+       MT_lock_set(&b->theaplock);
        if ( !isVIEW(b)) {
                BUN cnt = BATcapacity(b);
                size += ROUND_UP(b->theap->free, blksize);
                if (b->tvheap)
                        size += ROUND_UP(b->tvheap->free, blksize);
+               MT_lock_unset(&b->theaplock);
+
                if (b->thash)
                        size += ROUND_UP(sizeof(BUN) * cnt, blksize);
                size += IMPSimprintsize(b);
+       } else {
+               MT_lock_unset(&b->theaplock);
        }
        *tot = size;
        BBPunfix(*bid);
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -49,7 +49,6 @@ finalize_ouput(bat *res, BAT *bn, str ms
                bn->tkey = BATcount(bn) <= 1;
                bn->tsorted = BATcount(bn) <= 1;
                bn->trevsorted = BATcount(bn) <= 1;
-               bn->theap->dirty = true;
                BBPkeepref(*res = bn->batCacheid);
        } else if (bn)
                BBPreclaim(bn);
diff --git a/monetdb5/modules/kernel/microbenchmark.c 
b/monetdb5/modules/kernel/microbenchmark.c
--- a/monetdb5/modules/kernel/microbenchmark.c
+++ b/monetdb5/modules/kernel/microbenchmark.c
@@ -384,8 +384,7 @@ MBMmix(bat *bn, bat *batid)
                *(int *) Tloc(b, idx) = val;
        }
 
-       BBPunfix(b->batCacheid);
-       *bn = b->batCacheid;
+       BBPkeepref(*bn= b->batCacheid);
 
        return MAL_SUCCEED;
 }
diff --git a/monetdb5/modules/kernel/status.c b/monetdb5/modules/kernel/status.c
--- a/monetdb5/modules/kernel/status.c
+++ b/monetdb5/modules/kernel/status.c
@@ -226,25 +226,29 @@ SYSmemStatistics(bat *ret, bat *ret2)
        throw(MAL, "status.memStatistics", SQLSTATE(HY013) MAL_MALLOC_FAIL);
 }
 
-#define heap(X1,X2,X3,X4)                                                      
                \
+#define heap(X1,X2,X3,X4,UNLOCK)                                               
        \
        if (X1) {                                                               
                                \
                sz = HEAPmemsize(X2);                                           
                \
                if (sz > *minsize) {                                            
                \
                        sprintf(buf, X4"/%s", s);                               
                \
                        if (BUNappend(bn, buf, false) != GDK_SUCCEED || \
-                               BUNappend(b, &sz, false) != GDK_SUCCEED)        
\
+                               BUNappend(b, &sz, false) != GDK_SUCCEED) {      
\
+                               UNLOCK;                                         
                                \
                                goto bailout;                                   
                        \
+                       }                                                       
                                        \
                }                                                               
                                        \
                X3 += sz; tot += sz;                                            
                \
        }
-#define heapvm(X1,X2,X3,X4)                                                    
                \
+#define heapvm(X1,X2,X3,X4,UNLOCK)                                             
        \
        if (X1) {                                                               
                                \
                sz = HEAPvmsize(X2);                                            
                \
                if (sz > *minsize) {                                            
                \
                        sprintf(buf, X4"/%s", s);                               
                \
                        if (BUNappend(bn, buf, false) != GDK_SUCCEED || \
-                               BUNappend(b, &sz, false) != GDK_SUCCEED)        
\
+                               BUNappend(b, &sz, false) != GDK_SUCCEED) {      
\
+                               UNLOCK;                                         
                                \
                                goto bailout;                                   
                        \
+                       }                                                       
                                        \
                }                                                               
                                        \
                X3 += sz; tot += sz;                                            
                \
        }
@@ -288,15 +292,21 @@ SYSmem_usage(bat *ret, bat *ret2, const 
                }
                tot += (lng) sz;
 
+               if (c)
+                       MT_lock_set(&c->theaplock);
                if (c == NULL || isVIEW(c)) {
+                       if (c)
+                               MT_lock_unset(&c->theaplock);
                        continue;
                }
-               heap(1,c->theap,tbuns,"tbuns");
+
+               heap(1,c->theap,tbuns,"tbuns", MT_lock_unset(&c->theaplock));
+               heap(c->tvheap,c->tvheap,tail,"tail", 
MT_lock_unset(&c->theaplock));
+               MT_lock_unset(&c->theaplock);
                MT_rwlock_rdlock(&c->thashlock);
-               heap(c->thash && c->thash != (Hash *) 
1,&c->thash->heaplink,thsh,"thshl");
-               heap(c->thash && c->thash != (Hash *) 
1,&c->thash->heapbckt,thsh,"thshb");
-               MT_rwlock_rdunlock(&b->thashlock);
-               heap(c->tvheap,c->tvheap,tail,"tail");
+               heap(c->thash && c->thash != (Hash *) 
1,&c->thash->heaplink,thsh,"thshl",MT_rwlock_rdunlock(&c->thashlock));
+               heap(c->thash && c->thash != (Hash *) 
1,&c->thash->heapbckt,thsh,"thshb",MT_rwlock_rdunlock(&c->thashlock));
+               MT_rwlock_rdunlock(&c->thashlock);
        }
        /* totals per category */
        if (BUNappend(bn, "_tot/hbuns", false) != GDK_SUCCEED ||
@@ -390,15 +400,22 @@ SYSvm_usage(bat *ret, bat *ret2, const l
 
                s = BBP_logical(i);
                c = BBP_cache(i);
+
+               if (c)
+                       MT_lock_set(&c->theaplock);
                if (c == NULL || isVIEW(c)) {
+                       if (c)
+                               MT_lock_unset(&c->theaplock);
                        continue;
                }
-               heapvm(1,c->theap,tbuns,"tcuns");
+
+               heapvm(1,c->theap,tbuns,"tcuns",MT_lock_unset(&c->theaplock));
+               
heapvm(c->tvheap,c->tvheap,tail,"tail",MT_lock_unset(&c->theaplock));
+               MT_lock_unset(&c->theaplock);
                MT_rwlock_rdlock(&c->thashlock);
-               heapvm(c->thash && c->thash != (Hash *) 
1,&c->thash->heaplink,thsh,"thshl");
-               heapvm(c->thash && c->thash != (Hash *) 
1,&c->thash->heapbckt,thsh,"thshb");
+               heapvm(c->thash && c->thash != (Hash *) 
1,&c->thash->heaplink,thsh,"thshl",MT_rwlock_rdunlock(&c->thashlock));
+               heapvm(c->thash && c->thash != (Hash *) 
1,&c->thash->heapbckt,thsh,"thshb",MT_rwlock_rdunlock(&c->thashlock));
                MT_rwlock_rdunlock(&c->thashlock);
-               heapvm(c->tvheap,c->tvheap,tail,"tail");
        }
        /* totals per category */
        if (BUNappend(bn, "_tot/hbuns", false) != GDK_SUCCEED ||
diff --git a/monetdb5/modules/mal/batExtensions.c 
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -75,10 +75,9 @@ CMDBATdup(Client cntxt, MalBlkPtr mb, Ma
        bat input = *getArgReference_bat(stk, pci, 2);
 
        (void)cntxt;
-       if ((i = BATdescriptor(input)) == NULL)
+       if ((i = BBPquickdesc(input)) == NULL)
                throw(MAL, "bat.new", INTERNAL_BAT_ACCESS);
        b = COLnew(i->hseqbase, tt, BATcount(i), TRANSIENT);
-       BBPunfix(i->batCacheid);
        if (b == 0)
                throw(MAL,"bat.new", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        *ret = b->batCacheid;
diff --git a/monetdb5/modules/mal/bbp.c b/monetdb5/modules/mal/bbp.c
--- a/monetdb5/modules/mal/bbp.c
+++ b/monetdb5/modules/mal/bbp.c
@@ -432,6 +432,7 @@ CMDbbp(bat *ID, bat *NS, bat *TT, bat *C
                                        mode = "transient";
                                len = snprintf(buf, FILENAME_MAX, "%s", 
BBP_physical(i));
                                if (len == -1 || len >= FILENAME_MAX) {
+                                       BBPunfix(bn->batCacheid);
                                        msg = createException(MAL, 
"catalog.bbp", SQLSTATE(HY013) "Could not bpp filename path is too large");
                                        goto bailout;
                                }
diff --git a/monetdb5/modules/mal/groupby.c b/monetdb5/modules/mal/groupby.c
--- a/monetdb5/modules/mal/groupby.c
+++ b/monetdb5/modules/mal/groupby.c
@@ -183,10 +183,9 @@ GROUPmulticolumngroup(Client cntxt, MalB
        if (msg == MAL_SUCCEED && aggr->last > 1)
                do {
                        /* early break when there are as many groups as entries 
*/
-                       b = BATdescriptor(*hist);
+                       b = BBPquickdesc(*hist);
                        if (b) {
                                j = BATcount(b) == count;
-                               BBPunfix(*hist);
                                if (j)
                                        break;
                        }
diff --git a/monetdb5/modules/mal/inspect.c b/monetdb5/modules/mal/inspect.c
--- a/monetdb5/modules/mal/inspect.c
+++ b/monetdb5/modules/mal/inspect.c
@@ -670,10 +670,9 @@ INSPECTtypeName(Client cntxt, MalBlkPtr 
        } else if (isaBatType(getArgType(mb,pci,1) ) ){
                bat *bid= getArgReference_bat(stk,pci,1);
                BAT *b;
-               if ((b = BATdescriptor(*bid)) ) {
+               if ((b = BBPquickdesc(*bid)))
                        *hn = getTypeName(newBatType(b->ttype));
-                       BBPunfix(b->batCacheid);
-               } else
+               else
                        *hn = getTypeName(getArgType(mb, pci, 1));
        } else
                *hn = getTypeName(getArgType(mb, pci, 1));
diff --git a/monetdb5/modules/mal/json_util.c b/monetdb5/modules/mal/json_util.c
--- a/monetdb5/modules/mal/json_util.c
+++ b/monetdb5/modules/mal/json_util.c
@@ -23,41 +23,24 @@ JSONresultSet(json *res, bat *uuid, bat 
        char *result;
        size_t sz, len=0;
 
-       if ((bu = BATdescriptor(*uuid)) == NULL)
+       if ((bu = BBPquickdesc(*uuid)) == NULL)
                throw(MAL, "json.resultset", INTERNAL_BAT_ACCESS);
-       if ((br = BATdescriptor(*rev)) == NULL) {
-               BBPunfix(bu->batCacheid);
+       if ((br = BBPquickdesc(*rev)) == NULL)
                throw(MAL, "json.resultset", INTERNAL_BAT_ACCESS);
-       }
-       if ((bj = BATdescriptor(*js)) == NULL) {
-               BBPunfix(bu->batCacheid);
-               BBPunfix(br->batCacheid);
+       if ((bj = BBPquickdesc(*js)) == NULL)
                throw(MAL, "json.resultset", INTERNAL_BAT_ACCESS);
-       }
-       if ( !(BATcount(bu) == BATcount(br) && BATcount(br) == BATcount(bj)) ){
-               BBPunfix(bu->batCacheid);
-               BBPunfix(br->batCacheid);
-               BBPunfix(bj->batCacheid);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to