Changeset: 7074e6ec9cf1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7074e6ec9cf1
Modified Files:
        monetdb5/mal/mal_resource.c
        monetdb5/mal/mal_resource.h
Branch: default
Log Message:

Avoid potential infinite loops.
If you are our of memory then make sure that you
continue at some point to allow instructions to free up space.


diffs (35 lines):

diff --git a/monetdb5/mal/mal_resource.c b/monetdb5/mal/mal_resource.c
--- a/monetdb5/mal/mal_resource.c
+++ b/monetdb5/mal/mal_resource.c
@@ -193,7 +193,6 @@ MALresourceFairness(lng usec)
        /* ample of memory available*/
        if ( rss < MEMORY_THRESHOLD * monet_memory && usec <= TIMESLICE)
                return;
-       threads = GDKnr_threads > 0 ? GDKnr_threads : 1;
 
        /* worker reporting time spent  in usec! */
        clk =  usec / 1000;
@@ -202,10 +201,11 @@ MALresourceFairness(lng usec)
                PARDEBUG mnstr_printf(GDKstdout, "#delay initial "LLFMT"n", 
clk);
                ATOMIC_DEC(running, runningLock, "MALresourceFairness");
                /* always keep one running to avoid all waiting  */
-               while (clk > 0 && running >= 2) {
+               while (clk > 0 && running >= 2 && delayed < MAX_DELAYS) {
                        /* speed up wake up when we have memory */
                        if (rss < MEMORY_THRESHOLD * monet_memory)
                                break;
+                       threads = GDKnr_threads > 0 ? GDKnr_threads : 1;
                        delay = (unsigned int) ( ((double)DELAYUNIT * running) 
/ threads);
                        if (delay) {
                                if ( delayed++ == 0){
diff --git a/monetdb5/mal/mal_resource.h b/monetdb5/mal/mal_resource.h
--- a/monetdb5/mal/mal_resource.h
+++ b/monetdb5/mal/mal_resource.h
@@ -24,6 +24,7 @@
 
 #define TIMESLICE  2000000 /* usec */
 #define DELAYUNIT 5 /* ms delay in parallel processing decisions */
+#define MAX_DELAYS 1000 /* never wait forever */
 
 #define USE_MAL_ADMISSION
 #ifdef USE_MAL_ADMISSION
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to