Changeset: 5f4273e5bcdb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5f4273e5bcdb
Added Files:
        sql/test/BugTracker-2017/Tests/All
        sql/test/BugTracker-2017/Tests/avggroupbysq.Bug-6178.sql
        sql/test/BugTracker-2017/Tests/avggroupbysq.Bug-6178.stable.err
        sql/test/BugTracker-2017/Tests/avggroupbysq.Bug-6178.stable.out
        sql/test/BugTracker-2017/Tests/shutdown.Bug-6182.sql
        sql/test/BugTracker-2017/Tests/shutdown.Bug-6182.stable.err
        sql/test/BugTracker-2017/Tests/shutdown.Bug-6182.stable.out
Modified Files:
        clients/Tests/exports.stable.out
        gdk/ChangeLog
        gdk/gdk.h
        gdk/gdk_aggr.c
        gdk/gdk_atoms.c
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        gdk/gdk_bbp.h
        gdk/gdk_interprocess.c
        gdk/gdk_interprocess.h
        gdk/gdk_logger.c
        gdk/gdk_tm.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_factory.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/kernel/aggr.c
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/groupby.c
        monetdb5/modules/mal/mal_mapi.c
        monetdb5/modules/mal/orderidx.c
        monetdb5/modules/mal/tablet.c
        monetdb5/modules/mal/tokenizer.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_statistics.c
        monetdb5/scheduler/run_memo.c
        sql/backends/monet5/UDF/pyapi/connection.c
        sql/backends/monet5/UDF/pyapi/conversion.c
        sql/backends/monet5/UDF/pyapi/conversion.h
        sql/backends/monet5/UDF/pyapi/emit.c
        sql/backends/monet5/UDF/pyapi/formatinput.c
        sql/backends/monet5/UDF/pyapi/pyapi.c
        sql/backends/monet5/UDF/pyapi/pyapi.h
        sql/backends/monet5/UDF/pyapi/pyheader.h
        sql/backends/monet5/UDF/pyapi/pyloader.c
        sql/backends/monet5/UDF/pyapi/pytypes.c
        sql/backends/monet5/UDF/pyapi/type_conversion.c
        sql/backends/monet5/UDF/pyapi/unicode.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/vaults/lidar/lidar.c
        sql/backends/monet5/vaults/netcdf/netcdf.c
        sql/backends/monet5/vaults/shp/shp.c
        sql/storage/bat/bat_utils.c
        sql/storage/bat/res_table.c
        testing/Mtest.py.in
        tools/mserver/shutdowntest.c
Branch: default
Log Message:

merged


diffs (truncated from 1550 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -186,10 +186,9 @@ BAT *BATunique(BAT *b, BAT *s);
 BBPrec *BBP[N_BBPINIT];
 void BBPaddfarm(const char *dirname, int rolemask);
 void BBPclear(bat bid);
-int BBPdecref(bat b, int logical);
 BAT *BBPdescriptor(bat b);
+int BBPfix(bat b);
 int BBPin;
-int BBPincref(bat b, int logical);
 bat BBPindex(const char *nme);
 void BBPkeepref(bat i);
 bat BBPlimit;
@@ -199,11 +198,14 @@ int BBPout;
 str BBPphysical(bat b, str buf);
 BAT *BBPquickdesc(bat b, int delaccess);
 int BBPreclaim(BAT *b);
+int BBPrelease(bat b);
 int BBPrename(bat bid, const char *nme);
 void BBPresetfarms(void);
+int BBPretain(bat b);
 gdk_return BBPsave(BAT *b);
 void BBPshare(bat b);
 gdk_return BBPsync(int cnt, bat *subcommit);
+int BBPunfix(bat b);
 void BBPunlock(void);
 gdk_return BUNappend(BAT *b, const void *right, bit force);
 gdk_return BUNdelete(BAT *b, oid o);
diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,6 +1,10 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Tue Jan  3 2017 Sjoerd Mullender <[email protected]>
+- Replaced BBPincref/BBPdecref with BBPfix/BBPunfix for physical reference
+  count and BBPretain/BBPrelease for logical reference count maintenance.
+
 * Fri Dec 16 2016 Sjoerd Mullender <[email protected]>
 - Removed automatic conversion of 32-bit OIDs to 64 bits on 64-bit
   architectures.
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1617,9 +1617,9 @@ gdk_export void GDKqsort_rev(void *h, vo
  * @item int
  * @tab BBPunfix (bat bi)
  * @item int
- * @tab BBPincref (bat bi, int logical)
+ * @tab BBPretain (bat bi)
  * @item int
- * @tab BBPdecref (bat bi, int logical)
+ * @tab BBPrelease (bat bi)
  * @item str
  * @tab BBPname (bat bi)
  * @item bat
@@ -1708,8 +1708,6 @@ gdk_export BBPrec *BBP[N_BBPINIT];
         "")
 #define BBPvalid(i)    (BBP_logical(i) != NULL && *BBP_logical(i) != '.')
 #define BATgetId(b)    BBPname((b)->batCacheid)
-#define BBPfix(i)      BBPincref((i), FALSE)
-#define BBPunfix(i)    BBPdecref((i), FALSE)
 
 #define BBPRENAME_ALREADY      (-1)
 #define BBPRENAME_ILLEGAL      (-2)
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -1386,7 +1386,8 @@ BATgroupavg(BAT **bnp, BAT **cntsp, BAT 
                return GDK_SUCCEED;
        }
 
-       if ((e == NULL ||
+       if ((!skip_nils || cntsp == NULL || b->tnonil) &&
+           (e == NULL ||
             (BATcount(e) == BATcount(b) && e->hseqbase == b->hseqbase)) &&
            (BATtdense(g) || (g->tkey && g->tnonil))) {
                /* trivial: singleton groups, so all results are equal
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -114,16 +114,16 @@ hgeHash(const hge *v)
 /*
  * @+ Standard Atoms
  */
-static inline int
+static int
 batFix(const bat *b)
 {
-       return BBPincref(*b, TRUE);
+       return BBPretain(*b);
 }
 
-static inline int
+static int
 batUnfix(const bat *b)
 {
-       return BBPdecref(*b, TRUE);
+       return BBPrelease(*b);
 }
 
 /*
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1934,9 +1934,9 @@ BATmode(BAT *b, int mode)
                }
                /* persistent BATs get a logical reference */
                if (mode == PERSISTENT) {
-                       BBPincref(bid, TRUE);
+                       BBPretain(bid);
                } else if (b->batPersistence == PERSISTENT) {
-                       BBPdecref(bid, TRUE);
+                       BBPrelease(bid);
                }
                MT_lock_set(&GDKswapLock(bid));
                if (mode == PERSISTENT) {
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -59,9 +59,8 @@
  *
  * @item reference counting
  * Bats use have two kinds of references: logical and physical
- * (pointer) ones.  Both are administered with the BBPincref/BBPdecref
- * routines. For backward compatibility, we maintain BBPfix/BBPunfix
- * as shorthands for the adjusting the pointer references.
+ * (pointer) ones.  The logical references are administered by
+ * BBPretain/BBPrelease, the physical ones by BBPfix/BBPunfix.
  *
  * @item share counting
  * Views use the heaps of there parent bats. To save guard this, the
@@ -2044,7 +2043,7 @@ incref(bat i, int logical, int lock)
                return 0;
        }
 
-       if (!BBPcheck(i, "BBPincref"))
+       if (!BBPcheck(i, logical ? "BBPretain" : "BBPfix"))
                return 0;
 
        if (lock) {
@@ -2084,7 +2083,7 @@ incref(bat i, int logical, int lock)
                         * lock.  Set the BBPLOADING flag so that
                         * other threads will wait until we're
                         * done. */
-                       BBP_status_on(i, BBPLOADING, "BBPincref");
+                       BBP_status_on(i, BBPLOADING, "BBPfix");
                        load = 1;
                }
        }
@@ -2112,17 +2111,25 @@ incref(bat i, int logical, int lock)
                        (void) getBBPdescriptor(tvp, lock);
                }
                /* done loading, release descriptor */
-               BBP_status_off(i, BBPLOADING, "BBPincref");
+               BBP_status_off(i, BBPLOADING, "BBPfix");
        }
        return refs;
 }
 
 int
-BBPincref(bat i, int logical)
+BBPfix(bat i)
 {
        int lock = locked_by ? MT_getpid() != locked_by : 1;
 
-       return incref(i, logical, lock);
+       return incref(i, FALSE, lock);
+}
+
+int
+BBPretain(bat i)
+{
+       int lock = locked_by ? MT_getpid() != locked_by : 1;
+
+       return incref(i, TRUE, lock);
 }
 
 void
@@ -2142,7 +2149,7 @@ BBPshare(bat parent)
 }
 
 static inline int
-decref(bat i, int logical, int releaseShare, int lock)
+decref(bat i, int logical, int releaseShare, int lock, const char *func)
 {
        int refs = 0, swap = 0;
        bat tp = 0, tvp = 0;
@@ -2161,7 +2168,7 @@ decref(bat i, int logical, int releaseSh
        while (BBP_status(i) & BBPUNLOADING) {
                if (lock)
                        MT_lock_unset(&GDKswapLock(i));
-               BBPspin(i, "BBPdecref", BBPUNLOADING);
+               BBPspin(i, func, BBPUNLOADING);
                if (lock)
                        MT_lock_set(&GDKswapLock(i));
        }
@@ -2171,14 +2178,14 @@ decref(bat i, int logical, int releaseSh
        /* decrement references by one */
        if (logical) {
                if (BBP_lrefs(i) == 0) {
-                       GDKerror("BBPdecref: %s does not have logical 
references.\n", BBPname(i));
+                       GDKerror("%s: %s does not have logical references.\n", 
func, BBPname(i));
                        assert(0);
                } else {
                        refs = --BBP_lrefs(i);
                }
        } else {
                if (BBP_refs(i) == 0) {
-                       GDKerror("BBPdecref: %s does not have pointer 
fixes.\n", BBPname(i));
+                       GDKerror("%s: %s does not have pointer fixes.\n", func, 
BBPname(i));
                        assert(0);
                } else {
                        assert(b == NULL || b->theap.parentid == 0 || 
BBP_refs(b->theap.parentid) > 0);
@@ -2210,9 +2217,9 @@ decref(bat i, int logical, int releaseSh
                 * available anymore */
                assert((BBP_status(i) & BBPUNLOADING) == 0);
                BATDEBUG {
-                       fprintf(stderr, "#BBPdecref set to unloading BAT %d\n", 
i);
+                       fprintf(stderr, "#%s set to unloading BAT %d\n", func, 
i);
                }
-               BBP_status_on(i, BBPUNLOADING, "BBPdecref");
+               BBP_status_on(i, BBPUNLOADING, func);
                swap = TRUE;
        }
 
@@ -2228,34 +2235,42 @@ decref(bat i, int logical, int releaseSh
                        BBPdestroy(b);
                } else {
                        BATDEBUG {
-                               fprintf(stderr, "#BBPdecref unload and free bat 
%d\n", i);
+                               fprintf(stderr, "#%s unload and free bat %d\n", 
func, i);
                        }
-                       BBP_unload_inc(i, "BBPdecref");
+                       BBP_unload_inc(i, func);
                        /* free memory of transient */
-                       if (BBPfree(b, "BBPdecref") != GDK_SUCCEED)
+                       if (BBPfree(b, func) != GDK_SUCCEED)
                                return -1;      /* indicate failure */
                }
        }
        if (tp)
-               decref(tp, FALSE, FALSE, lock);
+               decref(tp, FALSE, FALSE, lock, func);
        if (tvp)
-               decref(tvp, FALSE, FALSE, lock);
+               decref(tvp, FALSE, FALSE, lock, func);
        return refs;
 }
 
-#undef BBPdecref
 int
-BBPdecref(bat i, int logical)
+BBPunfix(bat i)
 {
-       if (BBPcheck(i, "BBPdecref") == 0) {
+       if (BBPcheck(i, "BBPunfix") == 0) {
                return -1;
        }
-       return decref(i, logical, FALSE, TRUE);
+       return decref(i, FALSE, FALSE, TRUE, "BBPunfix");
+}
+
+int
+BBPrelease(bat i)
+{
+       if (BBPcheck(i, "BBPrelease") == 0) {
+               return -1;
+       }
+       return decref(i, TRUE, FALSE, TRUE, "BBPrelease");
 }
 
 /*
  * M5 often changes the physical ref into a logical reference.  This
- * state change consist of the sequence BBPincref(b,TRUE);BBPunfix(b).
+ * state change consist of the sequence BBPretain(b);BBPunfix(b).
  * A faster solution is given below, because it does not trigger the
  * BBP management actions, such as garbage collecting the bats.
  * [first step, initiate code change]
@@ -2277,15 +2292,15 @@ BBPkeepref(bat i)
 
                incref(i, TRUE, lock);
                assert(BBP_refs(i));
-               decref(i, FALSE, FALSE, lock);
+               decref(i, FALSE, FALSE, lock, "BBPkeepref");
        }
 }
 
 static inline void
 GDKunshare(bat parent)
 {
-       (void) decref(parent, FALSE, TRUE, TRUE);
-       (void) decref(parent, TRUE, FALSE, TRUE);
+       (void) decref(parent, FALSE, TRUE, TRUE, "GDKunshare");
+       (void) decref(parent, TRUE, FALSE, TRUE, "GDKunshare");
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to