From b38ceeb09c0704c91bd44a8bb9774ca27eec2f38 Mon Sep 17 00:00:00 2001 From: Constantin Kaplinsky Date: Tue, 18 Apr 2006 08:57:17 +0000 Subject: [PATCH] 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 --- x0vncserver/x0vncserver.cxx | 23 ++++++++++++++++++++--- 1 file 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()) { -- 2.39.5