Changeset: 869e5c9af1cc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=869e5c9af1cc
Modified Files:
MonetDB.spec
clients/Tests/exports.stable.out
clients/mapilib/Makefile.ag
configure.ag
debian/fix-deb.sh
debian/rules
gdk/gdk.h
gdk/gdk_imprints.c
gdk/gdk_orderidx.c
gdk/gdk_system.c
gdk/gdk_utils.c
monetdb5/mal/mal_dataflow.c
monetdb5/modules/kernel/status.c
monetdb5/modules/mal/tablet.c
sql/server/sql_mvc.c
Branch: default
Log Message:
Merge with Aug2018 branch.
diffs (truncated from 491 to 300 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -951,7 +951,6 @@ fi
--enable-fits=%{?with_fits:yes}%{!?with_fits:no} \
--enable-gdk=yes \
--enable-geom=%{?with_geos:yes}%{!?with_geos:no} \
- --enable-instrument=no \
--enable-int128=%{?with_int128:yes}%{!?with_int128:no} \
--enable-lidar=%{?with_lidar:yes}%{!?with_lidar:no} \
--enable-mapi=yes \
@@ -959,7 +958,6 @@ fi
--enable-netcdf=no \
--enable-odbc=yes \
--enable-optimize=no \
- --enable-profile=no \
--enable-pyintegration=%{?with_pyintegration:yes}%{!?with_pyintegration:no} \
--enable-rintegration=%{?with_rintegration:yes}%{!?with_rintegration:no} \
--enable-shp=no \
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
@@ -269,7 +269,6 @@ ssize_t GDKstrFromStr(unsigned char *res
str GDKstrdup(const char *s) __attribute__((__warn_unused_result__));
str GDKstrndup(const char *s, size_t n)
__attribute__((__warn_unused_result__));
void GDKsyserror(_In_z_ _Printf_format_string_ const char *format, ...)
__attribute__((__format__(__printf__, 1, 2)));
-ThreadRec GDKthreads[THREADS];
size_t GDKuniqueid(size_t offset);
gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, bool mayshare)
__attribute__((__warn_unused_result__));
lng GDKusec(void);
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2351,7 +2351,7 @@ AS_VAR_IF([enable_fits], [no], [], [
PKG_CHECK_MODULES([cfitsio], [cfitsio],
[have_fits="yes"; AC_DEFINE([HAVE_FITS], 1, [Define if the fits
module is to be enabled])],
[have_fits="no"; why_not_fits="(cfitsio library not found)"
- AS_VAR_IF([enable_fits], [yes], [AC_MSG_ERROR([cfitsio library
required for FITS support])]);
+ AS_VAR_IF([enable_fits], [yes], [AC_MSG_ERROR([cfitsio library
required for FITS support])])
enable_fits=no; why_not_fits="(cfitsio library not found)"])])
AM_CONDITIONAL([HAVE_FITS], [test x"$have_fits" != xno])
diff --git a/debian/fix-deb.sh b/debian/fix-deb.sh
--- a/debian/fix-deb.sh
+++ b/debian/fix-deb.sh
@@ -65,8 +65,6 @@ wheezy)
trusty)
# the trusty linker produces unresolved references to openSSL functions
sed -i '/openssl_LIBS/s/WIN32?//' clients/mapilib/Makefile.ag
- lib=$(grep openssl_LIBS clients/mapilib/Makefile.am)
- lib="${lib%% *}"
- sed -i "s/\\\$($lib)/\$(openssl_LIBS)/g" clients/mapilib/Makefile.am
clients/mapilib/Makefile.in
+ sed -i '/^libmapi_la_LIBADD/s/$/ $(openssl_LIBS)/'
clients/mapilib/Makefile.am clients/mapilib/Makefile.in
;;
esac
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -22,15 +22,12 @@ override_dh_auto_configure:
--enable-fits=no \
--enable-gdk=yes \
--enable-geom=yes \
- --enable-gsl=yes \
- --enable-instrument=no \
--enable-lidar=yes \
--enable-mapi=yes \
--enable-monetdb5=yes \
--enable-netcdf=no \
--enable-odbc=yes \
--enable-optimize=yes \
- --enable-profile=no \
--enable-pyintegration=yes \
--enable-rintegration=yes \
--enable-shp=no \
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -339,10 +339,24 @@
* attributes completely; if it is known, use it to find out whether
* specific attributes that we use are known */
#ifndef __has_attribute
+#ifndef __GNUC__
#define __has_attribute(attr) 0
#ifndef __attribute__
#define __attribute__(attr) /* empty */
#endif
+#else
+/* older GCC does have attributes, but not __has_attribute and not all
+ * attributes that we use are known */
+#define __has_attribute__alloc_size__ 1
+#define __has_attribute__cold__ 1
+#define __has_attribute__format__ 1
+#define __has_attribute__malloc__ 1
+#define __has_attribute__noreturn__ 1
+#define __has_attribute__returns_nonnull__ 0
+#define __has_attribute__visibility__ 1
+#define __has_attribute__warn_unused_result__ 1
+#define __has_attribute(attr) __has_attribute##attr
+#endif
#endif
#if !__has_attribute(__warn_unused_result__)
#define __warn_unused_result__
@@ -2319,19 +2333,20 @@ VALptr(const ValRecord *v)
* each thread. This speeds up access to tid and file descriptors.
*/
#define THREADS 1024
-#define THREADDATA 16
+#define THREADDATA 3
typedef struct threadStruct {
- int tid; /* logical ID by MonetDB; val == index into
this array + 1 (0 is invalid) */
- MT_Id pid; /* physical thread id (pointer-sized) from the
OS thread library */
+ int tid; /* logical ID by MonetDB; val == index
+ * into this array + 1 (0 is
+ * invalid) */
+ MT_Id pid; /* physical thread id (pointer-sized)
+ * from the OS thread library */
str name;
- ptr data[THREADDATA];
+ void *data[THREADDATA];
uintptr_t sp;
} ThreadRec, *Thread;
-gdk_export ThreadRec GDKthreads[THREADS];
-
gdk_export int THRgettid(void);
gdk_export Thread THRget(int tid);
gdk_export Thread THRnew(const char *name);
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -504,7 +504,8 @@ BATimprints(BAT *b)
((size_t *) imprints->imprints.base)[3] = (size_t) BATcount(b);
imprints->imprints.parentid = b->batCacheid;
b->timprints = imprints;
- if (BBP_status(b->batCacheid) & BBPEXISTING) {
+ if (BBP_status(b->batCacheid) & BBPEXISTING &&
+ !b->theap.dirty) {
MT_Id tid;
BBPfix(b->batCacheid);
if (MT_create_thread(&tid, BATimpsync, b,
MT_THR_DETACHED) < 0)
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -142,7 +142,8 @@ persistOIDX(BAT *b)
{
#ifdef PERSISTENTIDX
if ((BBP_status(b->batCacheid) & BBPEXISTING) &&
- b->batInserted == b->batCount) {
+ b->batInserted == b->batCount &&
+ !b->theap.dirty) {
MT_Id tid;
BBPfix(b->batCacheid);
if (MT_create_thread(&tid, BATidxsync, b, MT_THR_DETACHED) < 0)
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -153,12 +153,12 @@ static struct winthread {
#define DETACHED 2
#define WAITING 4
static CRITICAL_SECTION winthread_cs;
-static int winthread_cs_init = 0;
+static bool winthread_cs_init = false;
void
gdk_system_reset(void)
{
- winthread_cs_init = 0;
+ winthread_cs_init = false;
}
static struct winthread *
@@ -202,10 +202,10 @@ static void
join_threads(void)
{
struct winthread *w;
- int waited;
+ bool waited;
do {
- waited = 0;
+ waited = false;
EnterCriticalSection(&winthread_cs);
for (w = winthreads; w; w = w->next) {
if ((w->flags & (EXITED | DETACHED | WAITING)) ==
(EXITED | DETACHED)) {
@@ -214,7 +214,7 @@ join_threads(void)
WaitForSingleObject(w->hdl, INFINITE);
CloseHandle(w->hdl);
rm_winthread(w);
- waited = 1;
+ waited = true;
EnterCriticalSection(&winthread_cs);
break;
}
@@ -227,10 +227,10 @@ void
join_detached_threads(void)
{
struct winthread *w;
- int waited;
+ bool waited;
do {
- waited = 0;
+ waited = false;
EnterCriticalSection(&winthread_cs);
for (w = winthreads; w; w = w->next) {
if ((w->flags & (DETACHED | WAITING)) == DETACHED) {
@@ -239,7 +239,7 @@ join_detached_threads(void)
WaitForSingleObject(w->hdl, INFINITE);
CloseHandle(w->hdl);
rm_winthread(w);
- waited = 1;
+ waited = true;
EnterCriticalSection(&winthread_cs);
break;
}
@@ -256,12 +256,12 @@ MT_create_thread(MT_Id *t, void (*f) (vo
if (w == NULL)
return -1;
- if (winthread_cs_init == 0) {
+ if (!winthread_cs_init) {
/* we only get here before any threads are created,
* and this is the only time that winthread_cs_init is
* ever changed */
InitializeCriticalSection(&winthread_cs);
- winthread_cs_init = 1;
+ winthread_cs_init = true;
}
join_threads();
w->func = f;
@@ -504,12 +504,12 @@ static void
join_threads(void)
{
struct posthread *p;
- int waited;
+ bool waited;
pthread_t tid;
pthread_mutex_lock(&posthread_lock);
do {
- waited = 0;
+ waited = false;
for (p = posthreads; p; p = p->next) {
if (p->exited) {
tid = p->tid;
@@ -518,7 +518,7 @@ join_threads(void)
pthread_mutex_unlock(&posthread_lock);
pthread_join(tid, NULL);
pthread_mutex_lock(&posthread_lock);
- waited = 1;
+ waited = true;
break;
}
}
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -641,6 +641,7 @@ GDKinit(opt *set, int setlen)
int GDKnr_threads = 0;
static int GDKnrofthreads;
+static ThreadRec GDKthreads[THREADS];
int
GDKexiting(void)
@@ -1286,7 +1287,6 @@ GDKms(void)
* descriptors are the same as for the server and should be
* subsequently reset.
*/
-ThreadRec GDKthreads[THREADS];
void *THRdata[THREADDATA] = { 0 };
Thread
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -82,6 +82,7 @@ static struct worker {
enum {IDLE, RUNNING, JOINING, EXITED} flag;
Client cntxt; /* client we do work for (NULL
-> any) */
MT_Sema s;
+ MT_Sema startup;
} workers[THREADS];
static Queue *todo = 0; /* pending instructions */
@@ -331,6 +332,12 @@ DFLOWworker(void *T)
InstrPtr p;
thr = THRnew("DFLOWworker");
+ if (thr == NULL) {
+ t->flag = IDLE;
+ MT_sema_up(&t->startup);
+ return;
+ }
+ MT_sema_up(&t->startup);
#ifdef _MSC_VER
srand((unsigned int) GDKusec());
@@ -508,8 +515,10 @@ DFLOWinitialize(void)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list