Browse Source

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
tags/v1.1.90
Pierre Ossman 13 years ago
parent
commit
e2ef5c1994
3 changed files with 15 additions and 5 deletions
  1. 1
    2
      vncviewer/CConn.cxx
  2. 13
    2
      vncviewer/vncviewer.cxx
  3. 1
    1
      vncviewer/vncviewer.h

+ 1
- 2
vncviewer/CConn.cxx View File

@@ -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;

+ 13
- 2
vncviewer/vncviewer.cxx View File

@@ -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;
}

+ 1
- 1
vncviewer/vncviewer.h View File

@@ -19,7 +19,7 @@
#ifndef __VNCVIEWER_H__
#define __VNCVIEWER_H__

void exit_vncviewer();
void exit_vncviewer(const char *error = NULL);
void about_vncviewer();

#endif

Loading…
Cancel
Save