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