]> source.dussan.org Git - tigervnc.git/commitdiff
Proper cleanup on termination of Xvnc/libvnc.so
authorPierre Ossman <ossman@cendio.se>
Fri, 4 May 2018 12:58:01 +0000 (14:58 +0200)
committerPierre Ossman <ossman@cendio.se>
Tue, 29 May 2018 14:44:48 +0000 (16:44 +0200)
unix/xserver/hw/vnc/vncExt.c
unix/xserver/hw/vnc/vncExtInit.cc
unix/xserver/hw/vnc/vncExtInit.h

index f7ba9fa847f8929e5ad827dc15af047fc64dca5a..fd65eab67a72a53645d4ae5ada138012b6ca17ea 100644 (file)
@@ -585,6 +585,7 @@ static int SProcVncExtDispatch(ClientPtr client)
 
 static void vncResetProc(ExtensionEntry* extEntry)
 {
+  vncExtensionClose();
 }
 
 static void vncClientStateChange(CallbackListPtr * l, void * d, void * p)
index e4135b3c8b1fe562732367836960d26e9c1610de..d6f6b7423a07f922bfe93f89739c8eb9bda0346b 100644 (file)
@@ -262,6 +262,18 @@ void vncExtensionInit(void)
   vncRegisterBlockHandlers();
 }
 
+void vncExtensionClose(void)
+{
+  try {
+    for (int scr = 0; scr < vncGetScreenCount(); scr++) {
+      delete desktop[scr];
+      desktop[scr] = NULL;
+    }
+  } catch (rdr::Exception& e) {
+    vncFatalError("vncExtInit: %s",e.str());
+  }
+}
+
 void vncHandleSocketEvent(int fd, int scrIdx, int read, int write)
 {
   desktop[scrIdx]->handleSocketEvent(fd, read, write);
index e8294340c59c5adab9ec146b8bd0dd041ad50bc9..9414723fe341d9ac52919f5a3b0e57b4733cc25d 100644 (file)
@@ -48,6 +48,7 @@ extern int vncFbstride[];
 extern int vncInetdSock;
 
 void vncExtensionInit(void);
+void vncExtensionClose(void);
 
 void vncHandleSocketEvent(int fd, int scrIdx, int read, int write);
 void vncCallBlockHandlers(int* timeout);