Changeset: 7cdfd7df906a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7cdfd7df906a
Added Files:
        sql/test/BugTracker-2019/Tests/All
        
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.sql
        
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.stable.err
        
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.stable.out
Modified Files:
        clients/Tests/exports.stable.out
        configure.ag
        gdk/gdk.h
        gdk/gdk_hash.c
        gdk/gdk_imprints.c
        gdk/gdk_join.c
        gdk/gdk_orderidx.c
        gdk/gdk_posix.c
        gdk/gdk_utils.c
        monetdb5/extras/rapi/converters.c.h
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_import.c
        monetdb5/modules/mal/mal_mapi.c
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/Tests/rapi17.stable.out
        sql/backends/monet5/sql_scenario.c
        sql/server/sql_mvc.c
        testing/Mtest.py.in
Branch: default
Log Message:

Merge with Apr2019 branch.


diffs (truncated from 1233 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
@@ -324,6 +324,7 @@ void PROPdestroy(BAT *b);
 BUN SORTfnd(BAT *b, const void *v);
 BUN SORTfndfirst(BAT *b, const void *v);
 BUN SORTfndlast(BAT *b, const void *v);
+MT_Id THRcreate(void (*f)(void *), void *arg, enum MT_thr_detach d, const char 
*name);
 void *THRdata[THREADDATA];
 void THRdel(Thread t);
 Thread THRget(int tid);
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -1321,14 +1321,6 @@ AC_DEFINE_UNQUOTED([PATH_SEP_STR], ["$PA
 AC_DEFINE_UNQUOTED([SO_PREFIX], ["$SOPREF"], [Shared Object prefix])
 AC_DEFINE_UNQUOTED([SO_EXT], ["$SOEXT"], [Shared Object extension])
 
-AS_CASE([$host_os],
-    [cygwin*], [],
-    [
-       CYGPATH_W=echo
-       CYGPATH_WP=echo
-       AC_SUBST([CYGPATH_W])
-       AC_SUBST([CYGPATH_WP])])
-
 #    checks for libraries
 # check for bz2 (de)compression library
 org_have_bz2=auto
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1969,7 +1969,7 @@ gdk_export str GDKstrndup(const char *s,
                        fprintf(stderr,                         \
                                "#GDKstrdup(len=%zu) -> %p"     \
                                " %s[%s:%d]\n",                 \
-                               strlen(_str),                   \
+                               _str ? strlen(_str) : 0,        \
                                _res,                           \
                                __func__, __FILE__, __LINE__);  \
                _res;                                           \
@@ -2100,7 +2100,7 @@ GDKstrdup_debug(const char *str, const c
        void *res = GDKstrdup(str);
        ALLOCDEBUG fprintf(stderr, "#GDKstrdup(len=%zu) -> "
                           "%p [%s:%d]\n",
-                          strlen(str), res, filename, lineno);
+                          str ? strlen(str) : 0, res, filename, lineno);
        return res;
 }
 #define GDKstrdup(s)   GDKstrdup_debug((s), __FILE__, __LINE__)
@@ -2306,6 +2306,7 @@ typedef struct threadStruct {
 gdk_export int THRgettid(void);
 gdk_export Thread THRget(int tid);
 gdk_export Thread THRnew(const char *name);
+gdk_export MT_Id THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach 
d, const char *name);
 gdk_export void THRdel(Thread t);
 gdk_export void THRsetdata(int, void *);
 gdk_export void *THRgetdata(int);
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -270,6 +270,7 @@ BAThashsync(void *arg)
                                                        fsync(fd);
 #endif
                                                }
+                                               hp->dirty = false;
                                        } else {
                                                perror("write hash");
                                        }
@@ -278,8 +279,12 @@ BAThashsync(void *arg)
                        } else {
                                ((size_t *) hp->base)[0] |= (size_t) 1 << 24;
                                if (!(GDKdebug & NOSYNCMASK) &&
-                                   MT_msync(hp->base, SIZEOF_SIZE_T) < 0)
+                                   MT_msync(hp->base, SIZEOF_SIZE_T) < 0) {
                                        ((size_t *) hp->base)[0] &= ~((size_t) 
1 << 24);
+                               } else {
+                                       hp->dirty = false;
+                                       failed = ""; /* not failed */
+                               }
                        }
                        ALGODEBUG fprintf(stderr, "#BAThash: persisting hash %s 
(" LLFMT " usec)%s\n", hp->filename, GDKusec() - t0, failed);
                }
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -298,7 +298,9 @@ BATimpsync(void *arg)
                                                        fsync(fd);
 #endif
                                                }
+                                               hp->dirty = false;
                                        } else {
+                                               failed = " write failed";
                                                perror("write hash");
                                        }
                                        close(fd);
@@ -309,8 +311,13 @@ BATimpsync(void *arg)
                                /* sync-on-disk checked bit */
                                ((size_t *) hp->base)[0] |= (size_t) 1 << 16;
                                if (!(GDKdebug & NOSYNCMASK) &&
-                                   MT_msync(hp->base, SIZEOF_SIZE_T) < 0)
+                                   MT_msync(hp->base, SIZEOF_SIZE_T) < 0) {
+                                       failed = " sync failed";
                                        ((size_t *) hp->base)[0] &= ~((size_t) 
IMPRINTS_VERSION << 8);
+                               } else {
+                                       hp->dirty = false;
+                                       failed = ""; /* not failed */
+                               }
                        }
                        ALGODEBUG fprintf(stderr, "#BATimpsync(" ALGOBATFMT "): 
"
                                          "imprints persisted "
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3755,6 +3755,19 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
 
        ALGODEBUG t0 = GDKusec();
 
+       if ((parent = VIEWtparent(l)) != 0) {
+               BAT *b = BBPdescriptor(parent);
+               if (l->hseqbase == b->hseqbase &&
+                   BATcount(l) == BATcount(b))
+                       l = b;
+       }
+       if ((parent = VIEWtparent(r)) != 0) {
+               BAT *b = BBPdescriptor(parent);
+               if (r->hseqbase == b->hseqbase &&
+                   BATcount(r) == BATcount(b))
+                       r = b;
+       }
+
        CANDINIT(l, sl, lstart, lend, lcnt, lcand, lcandend);
        CANDINIT(r, sr, rstart, rend, rcnt, rcand, rcandend);
        lcnt = lcand ? (BUN) (lcandend - lcand) : lend - lstart;
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -41,6 +41,7 @@ BATidxsync(void *arg)
                                                        fsync(fd);
 #endif
                                                }
+                                               hp->dirty = false;
                                        } else {
                                                perror("write hash");
                                        }
@@ -49,8 +50,12 @@ BATidxsync(void *arg)
                        } else {
                                ((oid *) hp->base)[0] |= (oid) 1 << 24;
                                if (!(GDKdebug & NOSYNCMASK) &&
-                                   MT_msync(hp->base, SIZEOF_OID) < 0)
+                                   MT_msync(hp->base, SIZEOF_OID) < 0) {
                                        ((oid *) hp->base)[0] &= ~((oid) 1 << 
24);
+                               } else {
+                                       hp->dirty = false;
+                                       failed = ""; /* not failed */
+                               }
                        }
                        ALGODEBUG fprintf(stderr, "#BATidxsync(%s): orderidx 
persisted"
                                          " (" LLFMT " usec)%s\n",
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -1099,20 +1099,11 @@ win_mkdir(const char *pathname, const in
 void
 MT_sleep_ms(unsigned int ms)
 {
-#ifdef HAVE_NANOSLEEP_dont_use
-       struct timespec ts;
-
-       ts.tv_sec = (time_t) (ms / 1000);
-       ts.tv_nsec = 1000000 * (ms % 1000);
-       while (nanosleep(&ts, &ts) == -1 && errno == EINTR)
-               ;
-#else
        struct timeval tv;
 
        tv.tv_sec = ms / 1000;
        tv.tv_usec = 1000 * (ms % 1000);
        (void) select(0, NULL, NULL, NULL, &tv);
-#endif
 }
 
 #else /* WIN32 */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1357,23 +1357,98 @@ THRnew(const char *name)
                        .sp = THRsp(),
                };
 
-               PARDEBUG fprintf(stderr, "#%x %zu sp = %zu\n", (unsigned) 
s->tid, (size_t) pid, (size_t) s->sp);
-               PARDEBUG fprintf(stderr, "#nrofthreads %d\n", GDKnrofthreads);
-
-               GDKnrofthreads++;
                s->name = GDKstrdup(name);
-               if(!s->name) {
+               if (s->name == NULL) {
+                       s->pid = 0;
                        MT_lock_unset(&GDKthreadLock);
                        IODEBUG fprintf(stderr, "#THRnew: malloc failure\n");
                        GDKerror("THRnew: malloc failure\n");
                        return NULL;
                }
+               GDKnrofthreads++;
+               PARDEBUG fprintf(stderr, "#%x %zu sp = %zu\n", (unsigned) 
s->tid, (size_t) pid, (size_t) s->sp);
+               PARDEBUG fprintf(stderr, "#nrofthreads %d\n", GDKnrofthreads);
        }
        MT_lock_unset(&GDKthreadLock);
 
        return s;
 }
 
+struct THRstart {
+       void (*func) (void *);
+       void *arg;
+       MT_Sema sem;
+       Thread thr;
+};
+
+static void
+THRstarter(void *a)
+{
+       struct THRstart *t = a;
+       void (*func) (void *) = t->func;
+       void *arg = t->arg;
+
+       MT_sema_down(&t->sem);
+       t->thr->sp = THRsp();
+       (*func)(arg);
+       THRdel(t->thr);
+       MT_sema_destroy(&t->sem);
+       GDKfree(a);
+}
+
+MT_Id
+THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach d, const char 
*name)
+{
+       MT_Id tid;
+       Thread s;
+       struct THRstart *t;
+
+       if ((t = GDKmalloc(sizeof(*t))) == NULL)
+               return 0;
+       t->func = f;
+       t->arg = arg;
+       MT_lock_set(&GDKthreadLock);
+       for (s = GDKthreads; s < GDKthreads + THREADS; s++) {
+               if (s->pid == 0) {
+                       break;
+               }
+       }
+       if (s == GDKthreads + THREADS) {
+               MT_lock_unset(&GDKthreadLock);
+               IODEBUG fprintf(stderr, "#THRcreate: too many threads\n");
+               GDKerror("THRcreate: too many threads\n");
+               return 0;
+       }
+       tid = s->tid;
+       /* name is for debugging and may be NULL */
+       *s = (ThreadRec) {
+               .pid = ~0,
+               .tid = tid,
+               .data[0] = THRdata[0],
+               .data[1] = THRdata[1],
+               .name = GDKstrdup(name),
+       };
+       MT_lock_unset(&GDKthreadLock);
+       t->thr = s;
+       MT_sema_init(&t->sem, 0, "THRcreate");
+       if (MT_create_thread(&tid, THRstarter, t, d) != 0) {
+               GDKerror("THRcreate: could not start thread\n");
+               MT_sema_destroy(&t->sem);
+               GDKfree(t);
+               MT_lock_set(&GDKthreadLock);
+               s->pid = 0;
+               MT_lock_unset(&GDKthreadLock);
+               return 0;
+       }
+       MT_lock_set(&GDKthreadLock);
+       GDKnrofthreads++;
+       s->pid = tid;
+       MT_lock_unset(&GDKthreadLock);
+       /* send new thread on its way */
+       MT_sema_up(&t->sem);
+       return tid;
+}
+
 void
 THRdel(Thread t)
 {
diff --git a/monetdb5/extras/rapi/converters.c.h 
b/monetdb5/extras/rapi/converters.c.h
--- a/monetdb5/extras/rapi/converters.c.h
+++ b/monetdb5/extras/rapi/converters.c.h
@@ -8,41 +8,52 @@
 
 #define RSTR(somestr) mkCharCE(somestr, CE_UTF8)
 
+//Element-wise conversion functions, use no-op as passthrough when no 
conversion required
+#define M_TO_R_NOOP(v)               (v)
+#define R_TO_M_NOOP(v)               (v)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to