Changeset: 552f1b409f36 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=552f1b409f36
Modified Files:
        monetdb5/mal/mal_profiler.c
Branch: default
Log Message:

Fix checking for whether the thread needs to exit.
Also fix accesses to atomic variables.


diffs (54 lines):

diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -953,19 +953,17 @@ static void profilerHeartbeat(void *dumm
        int t;
 
        (void) dummy;
-       while (ATOMIC_GET(hbrunning, mal_beatLock) && !GDKexiting()) {
+       for (;;) {
                /* wait until you need this info */
-               while (ATOMIC_GET(hbdelay, mal_beatLock) == 0 || eventstream  
== NULL) {
-                       for (t = 1000; t > 0 && ! GDKexiting(); t -= 25) {
-                               MT_sleep_ms(25);
-                               if (!ATOMIC_GET(hbrunning, mal_beatLock))
-                                       return;
-                       }
+               while (ATOMIC_GET(hbdelay, mal_beatLock) == 0 || eventstream == 
NULL) {
+                       if (GDKexiting() || !ATOMIC_GET(hbrunning, 
mal_beatLock))
+                               return;
+                       MT_sleep_ms(25);
                }
-               for (t = (int) ATOMIC_GET(hbdelay, mal_beatLock); t > 0 && 
!GDKexiting(); t -= 25) {
+               for (t = (int) ATOMIC_GET(hbdelay, mal_beatLock); t > 0; t -= 
25) {
+                       if (GDKexiting() || !ATOMIC_GET(hbrunning, 
mal_beatLock))
+                               return;
                        MT_sleep_ms(t > 25 ? 25 : t);
-                       if (!ATOMIC_GET(hbrunning, mal_beatLock))
-                               return;
                }
                profilerHeartbeatEvent("ping");
        }
@@ -980,7 +978,7 @@ void setHeartbeat(int delay)
                return;
        }
        if (delay <= 10)
-               hbdelay =10;
+               delay = 10;
        ATOMIC_SET(hbdelay, (ATOMIC_TYPE) delay, mal_beatLock);
 }
 
@@ -995,11 +993,11 @@ void initHeartbeat(void)
 #ifdef NEED_MT_LOCK_INIT
        ATOMIC_INIT(mal_beatLock, "beatLock");
 #endif
-       hbrunning = 1;
+       ATOMIC_SET(hbrunning, 1, mal_beatLock);
        if (MT_create_thread(&hbthread, profilerHeartbeat, NULL, 
MT_THR_JOINABLE) < 0) {
                /* it didn't happen */
                hbthread = 0;
-               hbrunning = 0;
+               ATOMIC_SET(hbrunning, 0, mal_beatLock);
        }
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to