Changeset: 1edc0b9924da for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1edc0b9924da
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_logger.c
        gdk/gdk_private.h
        gdk/gdk_utils.c
        tools/mserver/mserver5.c
Branch: default
Log Message:

Trigger USR1 output when there are too many pending log files.


diffs (97 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
@@ -345,6 +345,7 @@ gdk_return GDKtracer_set_tracefile(const
 gdk_return GDKtracer_stop(void);
 gdk_return GDKupgradevarheap(BAT *b, var_t v, BUN cap, BUN ncopy) 
__attribute__((__warn_unused_result__));
 lng GDKusec(void);
+void GDKusr1triggerCB(void (*func)(void));
 const char *GDKversion(void) __attribute__((__const__));
 size_t GDKvm_cursize(void);
 void *GDKzalloc(size_t size) __attribute__((__malloc__)) 
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__alloc_size__(1))) 
__attribute__((__warn_unused_result__));
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2496,6 +2496,7 @@ gdk_export gdk_return gdk_add_callback(c
                                       int argc, void *argv[], int interval);
 gdk_export gdk_return gdk_remove_callback(const char *, gdk_callback_func *f);
 
+gdk_export void GDKusr1triggerCB(void (*func)(void));
 
 #define SQLSTATE(sqlstate)     #sqlstate "!"
 #define MAL_MALLOC_FAIL        "Could not allocate space"
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2746,6 +2746,8 @@ log_flush(logger *lg, ulng ts)
                if (lg->saved_id + lg->cur_max_pending > lg->id) {
                        lg->cur_max_pending *= 2; /* when too warn again */
                        TRC_WARNING(GDK, "Too many pending log files " LLFMT 
"\n", (lg->id - lg->saved_id));
+                       if (GDKtriggerusr1)
+                               (*GDKtriggerusr1)();
                }
                /* log files went down, reduce cur_max_pending */
                if (lg->cur_max_pending > lg->max_pending && (int)(lg->id - 
lg->saved_id) < (lg->cur_max_pending/2))
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -457,6 +457,8 @@ extern dbl no_hash_select_fraction;     
 #define HASH_DESTROY_CHAIN_LENGTH              1000
 extern BUN hash_destroy_chain_length;
 
+extern void (*GDKtriggerusr1)(void);
+
 #if !defined(NDEBUG) && !defined(__COVERITY__)
 /* see comment in gdk.h */
 #ifdef __GNUC__
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2061,6 +2061,13 @@ GDKprintinfo(void)
        printf("SIGUSR1 info end\n");
 }
 
+void (*GDKtriggerusr1)(void);
+void
+GDKusr1triggerCB(void (*func)(void))
+{
+       GDKtriggerusr1 = func;
+}
+
 exception_buffer *
 eb_init(exception_buffer *eb)
 {
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -247,6 +247,12 @@ emergencyBreakpoint(void)
 static volatile sig_atomic_t interrupted = 0;
 static volatile sig_atomic_t usr1_interrupted = 0;
 
+static void
+usr1trigger(void)
+{
+       usr1_interrupted = 1;
+}
+
 #ifdef _MSC_VER
 static BOOL WINAPI
 winhandler(DWORD type)
@@ -266,7 +272,7 @@ static void
 handler_usr1(int sig)
 {
        (void) sig;
-       usr1_interrupted = 1;
+       usr1trigger();
 }
 #endif
 
@@ -900,6 +906,8 @@ main(int argc, char **av)
        /* return all our free bats to global pool */
        BBPrelinquishbats();
 
+       GDKusr1triggerCB(usr1trigger);
+
 #ifdef _MSC_VER
        printf("# MonetDB server is started. To stop server press Ctrl-C.\n");
        fflush(stdout);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to