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
+8 -3
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;
} }
@@ -199,17 +198,23 @@ UninitGameClock (void)
void void
SuspendGameClock (void) SuspendGameClock (void)
{
if (GameClockRunning ())
{ {
SetSemaphore (GLOBAL (GameClock.clock_sem)); SetSemaphore (GLOBAL (GameClock.clock_sem));
GLOBAL (GameClock.TimeCounter) = 0; GLOBAL (GameClock.TimeCounter) = 0;
} }
}
void void
ResumeGameClock (void) ResumeGameClock (void)
{
if (!GameClockRunning ())
{ {
GLOBAL (GameClock.TimeCounter) = GetTimeCounter (); GLOBAL (GameClock.TimeCounter) = GetTimeCounter ();
ClearSemaphore (GLOBAL (GameClock.clock_sem)); ClearSemaphore (GLOBAL (GameClock.clock_sem));
} }
}
BOOLEAN BOOLEAN
GameClockRunning (void) GameClockRunning (void)