Fixed a deadlock that was freezing the calendar.

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@71 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
mcmartin
2002-09-23 22:11:50 +00:00
parent 047dcc8980
commit fe329193b7
+12 -7
View File
@@ -48,6 +48,7 @@ int clock_task_func(void* data)
cycle_index = delay_count = 0; cycle_index = delay_count = 0;
while (GLOBAL (GameClock).day_in_ticks == 0 && !Task_ReadState (task, TASK_EXIT)) while (GLOBAL (GameClock).day_in_ticks == 0 && !Task_ReadState (task, TASK_EXIT))
TaskSwitch (); TaskSwitch ();
while (!Task_ReadState (task, TASK_EXIT)) while (!Task_ReadState (task, TASK_EXIT))
{ {
BOOLEAN OnAutoPilot; BOOLEAN OnAutoPilot;
@@ -185,9 +186,7 @@ UninitGameClock (void)
if (!GameClockRunning ()) if (!GameClockRunning ())
ResumeGameClock (); ResumeGameClock ();
SetSemaphore (GLOBAL (GameClock.clock_sem)); ConcludeTask (GLOBAL (GameClock.clock_task));
Task_SetState (GLOBAL (GameClock.clock_task), TASK_EXIT);
ClearSemaphore (GLOBAL (GameClock.clock_sem));
GLOBAL (GameClock.clock_task) = 0; GLOBAL (GameClock.clock_task) = 0;
} }
@@ -200,15 +199,21 @@ UninitGameClock (void)
void void
SuspendGameClock (void) SuspendGameClock (void)
{ {
SetSemaphore (GLOBAL (GameClock.clock_sem)); if (GameClockRunning ())
GLOBAL (GameClock.TimeCounter) = 0; {
SetSemaphore (GLOBAL (GameClock.clock_sem));
GLOBAL (GameClock.TimeCounter) = 0;
}
} }
void void
ResumeGameClock (void) ResumeGameClock (void)
{ {
GLOBAL (GameClock.TimeCounter) = GetTimeCounter (); if (!GameClockRunning ())
ClearSemaphore (GLOBAL (GameClock.clock_sem)); {
GLOBAL (GameClock.TimeCounter) = GetTimeCounter ();
ClearSemaphore (GLOBAL (GameClock.clock_sem));
}
} }
BOOLEAN BOOLEAN