From 6938c61ed617528633d15d1a7d190e7d8fceccfd Mon Sep 17 00:00:00 2001 From: avolkov Date: Tue, 11 Feb 2003 11:00:24 +0000 Subject: [PATCH] Fixes audio thread scheduling issue, where it gets always preempted by a tight sound-wait loop and gets no running time (on OpenBSD) git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@731 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/encount.c | 3 +-- sc2/src/sc2code/libs/sndlib.h | 3 +++ sc2/src/sc2code/melee.c | 6 ++---- sc2/src/sc2code/pickmele.c | 3 +-- sc2/src/sc2code/pickship.c | 3 +-- sc2/src/sc2code/restart.c | 2 +- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/sc2/src/sc2code/encount.c b/sc2/src/sc2code/encount.c index bac68d139..534b6586a 100644 --- a/sc2/src/sc2code/encount.c +++ b/sc2/src/sc2code/encount.c @@ -718,8 +718,7 @@ EncounterBattle (void) // FreeSC2Data (); // DestroyFont (ReleaseFont (MicroFont)); - while (SoundPlaying ()) - ; + WaitForSoundEnd (TFBSOUND_WAIT_ALL); // DestroySound (ReleaseSound (MenuSounds)); if (GLOBAL (glob_flags) & CYBORG_ENABLED) diff --git a/sc2/src/sc2code/libs/sndlib.h b/sc2/src/sc2code/libs/sndlib.h index 5cdccd6a9..f6e64575a 100644 --- a/sc2/src/sc2code/libs/sndlib.h +++ b/sc2/src/sc2code/libs/sndlib.h @@ -72,6 +72,9 @@ extern void SetChannelRate (COUNT Channel, DWORD Rate, BYTE Priority); extern void StopSound (void); extern BOOLEAN SoundPlaying (void); +extern void WaitForSoundEnd (COUNT Channel); +#define TFBSOUND_WAIT_ALL ((COUNT)~0) + extern BOOLEAN AllocHardwareSample (PBYTE lpSnd, DWORD SampleRate, COUNT SampleLength, COUNT LoopBegin, COUNT LoopLen); extern BOOLEAN FreeHardwareSample (PBYTE lpSnd, COUNT SampleLength); diff --git a/sc2/src/sc2code/melee.c b/sc2/src/sc2code/melee.c index 022a3ec72..0b8445349 100644 --- a/sc2/src/sc2code/melee.c +++ b/sc2/src/sc2code/melee.c @@ -1694,8 +1694,7 @@ DoMelee (INPUT_STATE InputState, PMELEE_STATE pMS) BuildAndDrawShipList (pMS); ClearSemaphore (GraphicsSem); - while (SoundPlaying ()) - ; + WaitForSoundEnd (TFBSOUND_WAIT_ALL); SeedRandomNumbers (); load_gravity_well ((BYTE)((COUNT)TFB_Random () % NUMBER_OF_PLANET_TYPES)); @@ -1895,8 +1894,7 @@ Melee (void) MenuState.star_bucks[1] = GetTeamValue (&MenuState.TeamImage[1]); DoInput ((PVOID)&MenuState); - while (SoundPlaying ()) - ; + WaitForSoundEnd (TFBSOUND_WAIT_ALL); { FILE *save_fp; diff --git a/sc2/src/sc2code/pickmele.c b/sc2/src/sc2code/pickmele.c index ad77b7ad8..58b90cd88 100644 --- a/sc2/src/sc2code/pickmele.c +++ b/sc2/src/sc2code/pickmele.c @@ -313,8 +313,7 @@ ChangeSelection: PlaySoundEffect (SetAbsSoundIndex (MenuSounds, 1), 0, 0); - while (ChannelPlaying (0)) - ; + WaitForSoundEnd (0); } return (hBattleShip); diff --git a/sc2/src/sc2code/pickship.c b/sc2/src/sc2code/pickship.c index de3ef317e..f3d368d7a 100644 --- a/sc2/src/sc2code/pickship.c +++ b/sc2/src/sc2code/pickship.c @@ -257,8 +257,7 @@ OldContext = SetContext (SpaceContext); if (hBattleShip == GetTailLink (&race_q[0])) battle_counter = MAKE_WORD (1, HIBYTE (battle_counter)); - while (ChannelPlaying (0)) - ; + WaitForSoundEnd (0); } // DestroySound (ReleaseSound (MenuSounds)); diff --git a/sc2/src/sc2code/restart.c b/sc2/src/sc2code/restart.c index c87b3c4d9..d7d0feba0 100644 --- a/sc2/src/sc2code/restart.c +++ b/sc2/src/sc2code/restart.c @@ -239,7 +239,7 @@ LastActivity = WON_LAST_BATTLE; #ifdef TESTING if (GLOBAL (CurrentActivity) & CHECK_ABORT) { - while (SoundPlaying ()); + WaitForSoundEnd (WAIT_ALL_SOUNDS); StopSound (); FreeSC2Data ();