Mercurial > hg > dmlib
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); }