summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConstantin Kaplinsky <const@tightvnc.com>2006-04-18 08:57:17 +0000
committerConstantin Kaplinsky <const@tightvnc.com>2006-04-18 08:57:17 +0000
commitb38ceeb09c0704c91bd44a8bb9774ca27eec2f38 (patch)
treecbc45efb9b9d550cf49d972227e487165e021258
parent053aafc8b4c142fe146f2c38a3867f03ef1d44f7 (diff)
downloadtigervnc-b38ceeb09c0704c91bd44a8bb9774ca27eec2f38.tar.gz
tigervnc-b38ceeb09c0704c91bd44a8bb9774ca27eec2f38.zip
Fixed a bug with dereferencing a zero pointer in x0vncserver.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/branches/merge-with-vnc-4.1.1@540 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r--x0vncserver/x0vncserver.cxx23
1 files changed, 20 insertions, 3 deletions
diff --git a/x0vncserver/x0vncserver.cxx b/x0vncserver/x0vncserver.cxx
index 212ae076..dac2e7c7 100644
--- a/x0vncserver/x0vncserver.cxx
+++ b/x0vncserver/x0vncserver.cxx
@@ -132,7 +132,7 @@ class XDesktop : public SDesktop, public ColourMap
public:
XDesktop(Display* dpy_)
: dpy(dpy_), pb(0), server(0), image(0), pollmgr(0),
- oldButtonMask(0), haveXtest(false), maxButtons(0)
+ oldButtonMask(0), haveXtest(false), maxButtons(0), running(false)
{
#ifdef HAVE_XTEST
int xtestEventBase;
@@ -193,16 +193,28 @@ public:
(rdr::U8*)image->xim->data, this);
server = vs;
server->setPixelBuffer(pb);
+
+ running = true;
}
virtual void stop() {
+ running = false;
+
+ // FIXME: Delete images as well?!
delete pb;
delete pollmgr;
- // FIXME: Delete images as well?!
+
+ pb = 0;
+ pollmgr = 0;
+ }
+
+ inline bool isRunning() {
+ return running;
}
inline void poll() {
- pollmgr->poll();
+ if (pollmgr)
+ pollmgr->poll();
}
virtual void pointerEvent(const Point& pos, int buttonMask) {
@@ -265,6 +277,7 @@ protected:
int oldButtonMask;
bool haveXtest;
int maxButtons;
+ bool running;
};
@@ -509,6 +522,10 @@ int main(int argc, char** argv)
server.processSocketEvent(*i);
}
+ // Don't poll if the desktop object in not ready.
+ if (!desktop.isRunning())
+ continue;
+
server.checkTimeouts();
if (sched.goodTimeToPoll()) {