mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:12:43 +00:00 
			
		
		
		
	 51315c0b1d
			
		
	
	
		51315c0b1d
		
	
	
	
	
		
			
			Co-Authored-By: Tim Schumacher <timschumi@gmx.de> (thanks for the line ending and assert() troubleshooting)
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | |
| From: Grigoris Pavlakis <grigpavl@ece.auth.gr>
 | |
| Date: Fri, 17 Jun 2022 19:29:00 +0300
 | |
| Subject: [PATCH] Defer sound system initialization until main()
 | |
| 
 | |
| The original VVVVVV source code initializes the sound subsystem
 | |
| during global variable initialization. Technically speaking, the
 | |
| order of initialization of global variables is unspecified. This
 | |
| results in SerenityOS's dynamic linker to call Mix_OpenAudio()
 | |
| (which uses EventLoop under the hood) before all global variable
 | |
| initializers finish executing, resulting in an inconsistent state
 | |
| that causes assertion failure.
 | |
| 
 | |
| This patch moves initialization of the culprit sound system to
 | |
| a separate method, which is called first thing inside main(), thus
 | |
| preventing the setup from happening during musicclass's initialization
 | |
| in the global scope, which causes the aforementioned crash.
 | |
| ---
 | |
|  desktop_version/src/SoundSystem.cpp | 4 ++++
 | |
|  desktop_version/src/SoundSystem.h   | 1 +
 | |
|  desktop_version/src/main.cpp        | 1 +
 | |
|  3 files changed, 6 insertions(+)
 | |
| 
 | |
| diff --git a/desktop_version/src/SoundSystem.cpp b/desktop_version/src/SoundSystem.cpp
 | |
| index 8c5f962..056d946 100644
 | |
| --- a/desktop_version/src/SoundSystem.cpp
 | |
| +++ b/desktop_version/src/SoundSystem.cpp
 | |
| @@ -52,6 +52,10 @@ SoundTrack::SoundTrack(const char* fileName)
 | |
|  }
 | |
|  
 | |
|  SoundSystem::SoundSystem(void)
 | |
| +{
 | |
| +}
 | |
| +
 | |
| +void SoundSystem::initialize(void)
 | |
|  {
 | |
|  	int audio_rate = 44100;
 | |
|  	Uint16 audio_format = AUDIO_S16SYS;
 | |
| diff --git a/desktop_version/src/SoundSystem.h b/desktop_version/src/SoundSystem.h
 | |
| index 0cf3b84..f88e15b 100644
 | |
| --- a/desktop_version/src/SoundSystem.h
 | |
| +++ b/desktop_version/src/SoundSystem.h
 | |
| @@ -23,6 +23,7 @@ class SoundSystem
 | |
|  {
 | |
|  public:
 | |
|  	SoundSystem(void);
 | |
| +	void initialize(void);
 | |
|  };
 | |
|  
 | |
|  #endif /* SOUNDSYSTEM_H */
 | |
| diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp
 | |
| index b97270f..49bd853 100644
 | |
| --- a/desktop_version/src/main.cpp
 | |
| +++ b/desktop_version/src/main.cpp
 | |
| @@ -341,6 +341,7 @@ static void cleanup(void);
 | |
|  
 | |
|  int main(int argc, char *argv[])
 | |
|  {
 | |
| +    music.soundSystem.initialize();
 | |
|      char* baseDir = NULL;
 | |
|      char* assetsPath = NULL;
 | |
|  
 |