Protect checking clock state with a mutex to prevent deadlock condition

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@550 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
ghaushe
2003-01-13 04:42:25 +00:00
parent c8ffcd9aa2
commit 654b62a865
6 changed files with 16 additions and 19 deletions
+9 -3
View File
@@ -20,6 +20,8 @@
#define IsLeapYear(yi) (!((yi) & 3) && (((yi) % 100) || ((yi) % 400)))
static Mutex clock_mutex;
int clock_task_func(void* data)
{
BOOLEAN LastPilot;
@@ -170,7 +172,7 @@ InitGameClock (void)
{
if (!InitQueue (&GLOBAL (GameClock.event_q), NUM_EVENTS, sizeof (EVENT)))
return (FALSE);
clock_mutex = CreateMutex ();
GLOBAL (GameClock.month_index) = 2;
GLOBAL (GameClock.day_index) = 17;
GLOBAL (GameClock.year_index) = START_YEAR; /* Feb 17, START_YEAR */
@@ -189,13 +191,13 @@ UninitGameClock (void)
{
if (GLOBAL (GameClock.clock_task))
{
if (!GameClockRunning ())
ResumeGameClock ();
ResumeGameClock ();
ConcludeTask (GLOBAL (GameClock.clock_task));
GLOBAL (GameClock.clock_task) = 0;
}
DestroyMutex (clock_mutex);
UninitQueue (&GLOBAL (GameClock.event_q));
@@ -205,21 +207,25 @@ UninitGameClock (void)
void
SuspendGameClock (void)
{
LockMutex (clock_mutex);
if (GameClockRunning ())
{
SetSemaphore (GLOBAL (GameClock.clock_sem));
GLOBAL (GameClock.TimeCounter) = 0;
}
UnlockMutex (clock_mutex);
}
void
ResumeGameClock (void)
{
LockMutex (clock_mutex);
if (!GameClockRunning ())
{
GLOBAL (GameClock.TimeCounter) = GetTimeCounter ();
ClearSemaphore (GLOBAL (GameClock.clock_sem));
}
UnlockMutex (clock_mutex);
}
BOOLEAN
+2 -5
View File
@@ -30,11 +30,8 @@ INPUT_STATE
ConfirmExit (void)
{
INPUT_STATE InputState;
BOOLEAN ClockActive;
ClockActive = (BOOLEAN)(LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE
&& GameClockRunning ());
if (ClockActive)
if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
SuspendGameClock ();
else if (CommData.ConversationPhrases && PlayingTrack ())
PauseTrack ();
@@ -105,7 +102,7 @@ ConfirmExit (void)
}
ClearSemaphore (GraphicsSem);
if (ClockActive)
if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
ResumeGameClock ();
else if (CommData.ConversationPhrases && PlayingTrack ())
ResumeTrack ();
+1 -2
View File
@@ -362,8 +362,7 @@ BOOLEAN
FreeHyperspace (void)
{
ClearSemaphore (GraphicsSem);
if (GameClockRunning ())
SuspendGameClock ();
SuspendGameClock ();
SetSemaphore (GraphicsSem);
{
+1 -2
View File
@@ -902,8 +902,7 @@ extern COUNT _simple_count;
sc = _simple_count;
#endif //TESTING
if (GameClockRunning ())
SuspendGameClock ();
SuspendGameClock ();
if (!((GLOBAL (CurrentActivity) | NextActivity) & CHECK_LOAD))
ZeroVelocityComponents (
+2 -7
View File
@@ -141,7 +141,6 @@ PauseGame (void)
{
RECT r;
STAMP s;
BOOLEAN ClockActive;
CONTEXT OldContext;
FRAME F;
HOT_SPOT OldHot;
@@ -153,11 +152,7 @@ PauseGame (void)
GLOBAL (CurrentActivity) |= CHECK_PAUSE;
ClockActive = (BOOLEAN)(
LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE
&& GameClockRunning ()
);
if (ClockActive)
if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
SuspendGameClock ();
else if (CommData.ConversationPhrases && PlayingTrack ())
PauseTrack ();
@@ -201,7 +196,7 @@ PauseGame (void)
FlushInput ();
ClearSemaphore (GraphicsSem);
if (ClockActive)
if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
ResumeGameClock ();
else if (CommData.ConversationPhrases && PlayingTrack ())
ResumeTrack ();