diff options
author | Pierre Ossman <ossman@cendio.se> | 2011-07-12 16:56:34 +0000 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2011-07-12 16:56:34 +0000 |
commit | e2ef5c1994f94562a487e4a50c8985dcb826f938 (patch) | |
tree | 7943a23e38e623e5cd464ba153d76a5c6240df8b | |
parent | f8450ca5a0e984eb1509e0e08f63a32e133eb1fc (diff) | |
download | tigervnc-e2ef5c1994f94562a487e4a50c8985dcb826f938.tar.gz tigervnc-e2ef5c1994f94562a487e4a50c8985dcb826f938.zip |
Destroy the main UI and connection objects before popping up the fatal error
message. This avoids a lot of problems with recursion and trying to send
events over a dead socket.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4582 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r-- | vncviewer/CConn.cxx | 3 | ||||
-rw-r--r-- | vncviewer/vncviewer.cxx | 15 | ||||
-rw-r--r-- | vncviewer/vncviewer.h | 2 |
3 files changed, 15 insertions, 5 deletions
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx index 31ceff1c..e295c344 100644 --- a/vncviewer/CConn.cxx +++ b/vncviewer/CConn.cxx @@ -198,8 +198,7 @@ void CConn::socketEvent(int fd, void *data) exit_vncviewer(); } catch (rdr::Exception& e) { vlog.error(e.str()); - fl_alert(e.str()); - exit_vncviewer(); + exit_vncviewer(e.str()); } recursing = false; diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx index cfe5cfae..7b9434ff 100644 --- a/vncviewer/vncviewer.cxx +++ b/vncviewer/vncviewer.cxx @@ -66,9 +66,15 @@ using namespace std; static char aboutText[1024]; static bool exitMainloop = false; +static const char *exitError = NULL; -void exit_vncviewer() +void exit_vncviewer(const char *error) { + // Prioritise the first error we get as that is probably the most + // relevant one. + if ((error != NULL) && (exitError == NULL)) + exitError = strdup(error); + exitMainloop = true; } @@ -267,7 +273,7 @@ int main(int argc, char** argv) return 1; } - CConn cc(vncServerName); + CConn *cc = new CConn(vncServerName); while (!exitMainloop) { int next_timer; @@ -282,5 +288,10 @@ int main(int argc, char** argv) } } + delete cc; + + if (exitError != NULL) + fl_alert(exitError); + return 0; } diff --git a/vncviewer/vncviewer.h b/vncviewer/vncviewer.h index ab16b689..443dbea3 100644 --- a/vncviewer/vncviewer.h +++ b/vncviewer/vncviewer.h @@ -19,7 +19,7 @@ #ifndef __VNCVIEWER_H__ #define __VNCVIEWER_H__ -void exit_vncviewer(); +void exit_vncviewer(const char *error = NULL); void about_vncviewer(); #endif |