summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2011-07-12 16:56:34 +0000
committerPierre Ossman <ossman@cendio.se>2011-07-12 16:56:34 +0000
commite2ef5c1994f94562a487e4a50c8985dcb826f938 (patch)
tree7943a23e38e623e5cd464ba153d76a5c6240df8b
parentf8450ca5a0e984eb1509e0e08f63a32e133eb1fc (diff)
downloadtigervnc-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.cxx3
-rw-r--r--vncviewer/vncviewer.cxx15
-rw-r--r--vncviewer/vncviewer.h2
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