]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix regression with logging messages during wxApp initialization.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 4 Sep 2009 00:27:51 +0000 (00:27 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 4 Sep 2009 00:27:51 +0000 (00:27 +0000)
Changes in r61450 broke logging of the messages for errors occurring during
wxApp initialization, such as the message about the failure to establish
connection to the X server. Instead of being shown on stderr, wxLogGui was
used resulting in a crash. Creating wxLogOutputBest in wxLog code before
wxTheApp creation was not enough as this error occurred after wxTheApp
creation -- but before it became usable.

Fix this by explicitly asking wxLog to instantiate a safe log target in
DoCommonPreInit() if the user hadn't set up his own yet and using it until the
GUI is fully initialized.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61825 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/init.cpp

index cf366493175356e81748c95cdbbcc97ccb2dac8f..aca0a833060a0d27e5659fb80d0ac4c87fc2d176 100644 (file)
@@ -221,6 +221,21 @@ static bool DoCommonPreInit()
 #if wxUSE_LOG
     // Reset logging in case we were cleaned up and are being reinitialized.
     wxLog::DoCreateOnDemand();
+
+    // force wxLog to create a log target now: we do it because wxTheApp
+    // doesn't exist yet so wxLog will create a special log target which is
+    // safe to use even when the GUI is not available while without this call
+    // we could create wxApp in wxEntryStart() below, then log an error about
+    // e.g. failure to establish connection to the X server and wxLog would
+    // send it to wxLogGui (because wxTheApp does exist already) which, of
+    // course, can't be used in this case
+    //
+    // notice also that this does nothing if the user had set up a custom log
+    // target before -- which is fine as we want to give him this possibility
+    // (as it's impossible to override logging by overriding wxAppTraits::
+    // CreateLogTarget() before wxApp is created) and we just assume he knows
+    // what he is doing
+    wxLog::GetActiveTarget();
 #endif // wxUSE_LOG
 
     return true;