summarylogtreecommitdiffstats
path: root/0002-MessagemanCrashPatch.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-MessagemanCrashPatch.patch')
-rw-r--r--0002-MessagemanCrashPatch.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/0002-MessagemanCrashPatch.patch b/0002-MessagemanCrashPatch.patch
new file mode 100644
index 000000000000..1ea4e11d5344
--- /dev/null
+++ b/0002-MessagemanCrashPatch.patch
@@ -0,0 +1,59 @@
+From 3f64564dd7c62a2f3d9557c1bdb8475fd953abea Mon Sep 17 00:00:00 2001
+From: Matt McCutchen <matt@mattmccutchen.net>
+Date: Fri, 10 Feb 2017 08:00:52 -0500
+Subject: [PATCH] Instantiate MESSAGEMAN first. (#1384)
+
+This fixes a well-formed warning, but does it break anything?
+
+It's not clear off hand. Having this up for discussion.
+
+(Matt McCutchen <matt@mattmccutchen.net>: Cherry picked from commit
+a565a27da8c5278846c06585cb6e218ff8f0f1b7 with a conflict resolution.
+This commit fixes a crash on startup in MessageManager::Broadcast when I
+build StepMania with -DCMAKE_BUILD_TYPE=Release and g++ 6.3.1 on Fedora
+25. Apparently g++ is optimizing out the "this != NULL" on the grounds
+that calling a method on a null pointer has undefined behavior, so the
+"m_Logging" is a null dereference.)
+---
+ src/MessageManager.cpp | 3 +--
+ src/StepMania.cpp | 5 +++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/MessageManager.cpp b/src/MessageManager.cpp
+index 671871fba2..c487973d27 100644
+--- a/src/MessageManager.cpp
++++ b/src/MessageManager.cpp
+@@ -207,8 +207,7 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m )
+
+ void MessageManager::Broadcast( Message &msg ) const
+ {
+- // GAMESTATE is created before MESSAGEMAN, and has several BroadcastOnChangePtr members, so they all broadcast when they're initialized.
+- if(this != NULL && m_Logging)
++ if(m_Logging)
+ {
+ LOG->Trace("MESSAGEMAN:Broadcast: %s", msg.GetName().c_str());
+ }
+diff --git a/src/StepMania.cpp b/src/StepMania.cpp
+index 14f3824e2f..808c808a7e 100644
+--- a/src/StepMania.cpp
++++ b/src/StepMania.cpp
+@@ -1041,8 +1041,10 @@ int sm_main(int argc, char* argv[])
+ // This needs PREFSMAN.
+ Dialog::Init();
+
+- // Create game objects
++ // Set up the messaging system early to have well defined code.
++ MESSAGEMAN = new MessageManager;
+
++ // Create game objects
+ GAMESTATE = new GameState;
+
+ // This requires PREFSMAN, for PREFSMAN->m_bShowLoadingWindow.
+@@ -1162,7 +1164,6 @@ int sm_main(int argc, char* argv[])
+ SONGMAN->UpdatePopular();
+ SONGMAN->UpdatePreferredSort();
+ NSMAN = new NetworkSyncManager( pLoadingWindow );
+- MESSAGEMAN = new MessageManager;
+ STATSMAN = new StatsManager;
+
+ // Initialize which courses are ranking courses here.