Changeset: 5cc533410eb3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5cc533410eb3
Modified Files:
        gdk/gdk_utils.c
        tools/embedded/embedded.c
        tools/embedded/embedded.h
        tools/embedded/embeddedr.c
        tools/embedded/embeddedr.h
        tools/embedded/rpackage/NAMESPACE
        tools/embedded/rpackage/R/monetdb.R
Branch: embedded
Log Message:

Embedded MonetDB: shutdown support


diffs (109 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1241,10 +1241,12 @@ GDKexiting(void)
 void
 GDKexit(int status)
 {
+#ifndef HAVE_EMBEDDED
        if (GDKlockFile == NULL) {
                /* no database lock, so no threads, so exit now */
                exit(status);
        }
+#endif
        if (ATOMIC_TAS(GDKstopped, GDKstoppedLock, "GDKexit") == 0) {
                MT_Id pid = MT_getpid();
                Thread t, s;
@@ -1290,7 +1292,9 @@ GDKexit(int status)
 #if !defined(USE_PTHREAD_LOCKS) && !defined(NDEBUG)
                TEMDEBUG GDKlockstatistics(1);
 #endif
+#ifndef HAVE_EMBEDDED
                MT_global_exit(status);
+#endif
        }
        MT_exit_thread(-1);
 }
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -291,3 +291,8 @@ str monetdb_get_columns(void* conn, cons
 
        return msg;
 }
+
+void monetdb_shutdown() {
+       mal_exit();
+       monetdb_embedded_initialized = 0;
+}
diff --git a/tools/embedded/embedded.h b/tools/embedded/embedded.h
--- a/tools/embedded/embedded.h
+++ b/tools/embedded/embedded.h
@@ -27,5 +27,6 @@ char* monetdb_query(void* conn, char* qu
 char* monetdb_append(void* conn, const char* schema, const char* table, 
append_data *data, int ncols);
 void  monetdb_cleanup_result(void* conn, void* output);
 char* monetdb_get_columns(void* conn, const char* schema_name, const char 
*table_name, int *column_count, char ***column_names, int **column_types);
+void  monetdb_shutdown();
 
 #endif
diff --git a/tools/embedded/embeddedr.c b/tools/embedded/embeddedr.c
--- a/tools/embedded/embeddedr.c
+++ b/tools/embedded/embeddedr.c
@@ -141,3 +141,8 @@ SEXP monetdb_disconnect_R(SEXP connsexp)
        R_ClearExternalPtr(connsexp);
        return R_NilValue;
 }
+
+SEXP monetdb_shutdown_R() {
+       monetdb_shutdown();
+       return R_NilValue;
+}
diff --git a/tools/embedded/embeddedr.h b/tools/embedded/embeddedr.h
--- a/tools/embedded/embeddedr.h
+++ b/tools/embedded/embeddedr.h
@@ -16,10 +16,11 @@
 #include <Rdefines.h>
 #include "embedded.h"
 
-SEXP  monetdb_query_R(SEXP connsexp, SEXP querysexp, SEXP notreally);
-SEXP  monetdb_startup_R(SEXP installdirsexp, SEXP dbdirsexp, SEXP silentsexp);
-SEXP  monetdb_append_R(SEXP connsexp, SEXP schemaname, SEXP tablename, SEXP 
tabledata);
-SEXP  monetdb_connect_R();
-SEXP  monetdb_disconnect_R(SEXP connsexp);
+SEXP monetdb_query_R(SEXP connsexp, SEXP querysexp, SEXP notreally);
+SEXP monetdb_startup_R(SEXP installdirsexp, SEXP dbdirsexp, SEXP silentsexp);
+SEXP monetdb_append_R(SEXP connsexp, SEXP schemaname, SEXP tablename, SEXP 
tabledata);
+SEXP monetdb_connect_R();
+SEXP monetdb_disconnect_R(SEXP connsexp);
+SEXP monetdb_shutdown_R();
 
 #endif
diff --git a/tools/embedded/rpackage/NAMESPACE 
b/tools/embedded/rpackage/NAMESPACE
--- a/tools/embedded/rpackage/NAMESPACE
+++ b/tools/embedded/rpackage/NAMESPACE
@@ -3,3 +3,4 @@ export(monetdb_embedded_query)
 export(monetdb_embedded_append)
 export(monetdb_embedded_connect)
 export(monetdb_embedded_disconnect)
+export(monetdb_embedded_shutdown)
diff --git a/tools/embedded/rpackage/R/monetdb.R 
b/tools/embedded/rpackage/R/monetdb.R
--- a/tools/embedded/rpackage/R/monetdb.R
+++ b/tools/embedded/rpackage/R/monetdb.R
@@ -28,7 +28,7 @@ monetdb_embedded_startup <- function(dir
                res <- .Call("monetdb_startup_R", 
monetdb_embedded_env$install_dir, dir, quiet, PACKAGE="libmonetdb5")
        } else {
                if (dir != monetdb_embedded_env$started_dir) {
-                       warning("MonetDBLite cannot change database directories 
(already started in ", monetdb_embedded_env$started_dir, ").")
+                       stop("MonetDBLite cannot change database directories 
(already started in ", monetdb_embedded_env$started_dir, ", restart R).")
                }
                return(invisible(TRUE))
        }
@@ -112,3 +112,8 @@ monetdb_embedded_disconnect <- function(
        return(invisible(TRUE))
 }
 
+monetdb_embedded_shutdown <- function() {
+       .Call("monetdb_shutdown_R", PACKAGE="libmonetdb5")
+       return(invisible(TRUE))
+}
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to