changeset 276:40efff364904

Fix some possible data races.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 10 Oct 2012 22:02:08 +0300
parents 26d714c72c0f
children 2e04f6827a52
files ppl.c
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ppl.c	Wed Oct 10 21:23:18 2012 +0300
+++ b/ppl.c	Wed Oct 10 22:02:08 2012 +0300
@@ -729,7 +729,7 @@
 
     int currTick, prevTick = 0, prevRow = -1;
     
-    while (!engine.exitFlag && engine.plr->isPlaying)
+    while (!engine.exitFlag)
     {
         currTick = SDL_GetTicks();
         BOOL force = (currTick - prevTick > 500);
@@ -839,8 +839,12 @@
         }
 
 #if 1
+        JSS_LOCK(engine.plr);
+        JSSPattern *currPattern = engine.plr->pattern;
+        int currRow = engine.plr->row;
+        JSS_UNLOCK(engine.plr);
         
-        if (engine.plr->row != prevRow || force)
+        if (currRow != prevRow || force)
         {
             dmClearSurface(engine.screen, col.boxBg);
             
@@ -852,21 +856,23 @@
 
             dmDisplayPattern(engine.screen, 5, 40,
                 engine.screen->w - 6, engine.screen->h * 0.8,
-                engine.plr->pattern, engine.plr->row);
+                currPattern, currRow);
             
-            prevRow = engine.plr->row;
+            prevRow = currRow;
             force = TRUE;
         }
         
         if (force)
         {
             dmFillRect(engine.screen, 5, 5 + 12, engine.screen->w, 5 + 12 + 10, col.boxBg);
+            JSS_LOCK(engine.plr);
             dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12,
             "Tempo: %3d | Speed: %3d | Row: %3d/%-3d | Order: %3d/%-3d | Pattern: %3d/%-3d",
             engine.plr->tempo, engine.plr->speed,
             engine.plr->row, engine.plr->pattern->nrows,
             engine.plr->order, engine.mod->norders,
             engine.plr->npattern, engine.mod->npatterns);
+            JSS_UNLOCK(engine.plr);
         }
 
         if (force || currTick - prevTick >= (engine.pauseFlag ? 100 : 20))
@@ -876,6 +882,9 @@
             dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5,
                 engine.screen->w - 5, engine.screen->h - 5, engine.dev);
 
+            if (!engine.plr->isPlaying)
+                engine.exitFlag = TRUE;
+
             JSS_UNLOCK(engine.plr);
             JSS_UNLOCK(engine.dev);
         }