Changeset: 20f46549c0a6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/20f46549c0a6
Modified Files:
        gdk/gdk_strimps.c
        gdk/gdk_strimps.h
        monetdb5/modules/mal/pcre.c
Branch: string_imprints
Log Message:

Define and use non gdk private functions for strimp ref counting


diffs (83 lines):

diff --git a/gdk/gdk_strimps.c b/gdk/gdk_strimps.c
--- a/gdk/gdk_strimps.c
+++ b/gdk/gdk_strimps.c
@@ -795,6 +795,55 @@ STRMPappendBitstring(BAT *b, const str s
 }
 
 void
+STRMPbatdecref(BAT *b, bool remove)
+{
+       Strimps *strimps;
+       BAT *pb = NULL;
+
+       if (VIEWtparent(b)) {
+               pb = BBP_cache(VIEWtparent(b));
+               assert(pb);
+       } else {
+               pb = b;
+       }
+
+       MT_lock_set(&pb->batIdxLock);
+       if (pb && pb->tstrimps && pb->tstrimps != (Strimps *)1) {
+               strimps = pb->tstrimps;
+       } else {
+               MT_lock_unset(&pb->batIdxLock);
+               return;
+       }
+       STRMPdecref(strimps, remove);
+       MT_lock_unset(&pb->batIdxLock);
+}
+
+void
+STRMPbatincref(BAT *b)
+{
+       Strimps *strimps;
+       BAT *pb = NULL;
+
+       if (VIEWtparent(b)) {
+               pb = BBP_cache(VIEWtparent(b));
+               assert(pb);
+       } else {
+               pb = b;
+       }
+
+       MT_lock_set(&pb->batIdxLock);
+       if (pb && pb->tstrimps && pb->tstrimps != (Strimps *)1) {
+               strimps = pb->tstrimps;
+       } else {
+               MT_lock_unset(&pb->batIdxLock);
+               return;
+       }
+       STRMPincref(strimps);
+       MT_lock_unset(&pb->batIdxLock);
+
+}
+
+void
 STRMPdecref(Strimps *strimps, bool remove)
 {
        TRC_DEBUG(ACCELERATOR, "Decrement ref count of %s to " ULLFMT "\n",
diff --git a/gdk/gdk_strimps.h b/gdk/gdk_strimps.h
--- a/gdk/gdk_strimps.h
+++ b/gdk/gdk_strimps.h
@@ -46,4 +46,6 @@ typedef struct {
 gdk_export gdk_return STRMPcreate(BAT *b, BAT *s);
 gdk_export BAT *STRMPfilter(BAT *b, BAT *s, const str q);
 gdk_export gdk_return STRMPappendBitstring(BAT *b, const str s);
+gdk_export void STRMPbatdecref(BAT *, bool);
+gdk_export void STRMPbatincref(BAT *);
 #endif /* _GDK_STRIMPS_H_ */
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -1895,8 +1895,10 @@ PCRElikeselect(bat *ret, const bat *bid,
         */
        if (use_strimps && BATcount(b) >= STRIMP_CREATION_THRESHOLD && !*anti) {
                if (STRMPcreate(b, NULL) == GDK_SUCCEED) {
+                       STRMPbatincref(b);
                        BAT *tmp_s;
                        tmp_s = STRMPfilter(b, s, *pat);
+                       STRMPbatdecref(b, false);
                        if (tmp_s && s) {
                                BBPunfix(s->batCacheid);
                                s = tmp_s;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to