]> source.dussan.org Git - tigervnc.git/commitdiff
Call FatalError on fatal exceptions
authorPierre Ossman <ossman@cendio.se>
Thu, 7 Dec 2017 13:55:54 +0000 (14:55 +0100)
committerPierre Ossman <ossman@cendio.se>
Thu, 7 Dec 2017 13:55:54 +0000 (14:55 +0100)
unix/xserver/hw/vnc/XorgGlue.c
unix/xserver/hw/vnc/XorgGlue.h
unix/xserver/hw/vnc/vncExtInit.cc

index 712ed6afc80e693a3f02d89430c4ee09e25404cc..8c1e08572723a0642c90478e1d22e3d975840f4a 100644 (file)
@@ -40,6 +40,18 @@ unsigned long vncGetServerGeneration(void)
   return serverGeneration;
 }
 
+void vncFatalError(const char *format, ...)
+{
+  va_list args;
+  char buffer[4096];
+
+  va_start(args, format);
+  vsnprintf(buffer, sizeof(buffer), format, args);
+  va_end(args);
+
+  FatalError("%s", buffer);
+}
+
 int vncGetScreenCount(void)
 {
   return screenInfo.numScreens;
index 5cae860a162ec4ab5c51f3f467ba24bdf0b150cc..63227ac3583f4e7ca8f381f773f9c58f497a34d4 100644 (file)
 extern "C" {
 #endif
 
+#ifdef __GNUC__
+#  define __printf_attr(a, b) __attribute__((__format__ (__printf__, a, b)))
+#  define __noreturn_attr __attribute__((noreturn))
+#else
+#  define __printf_attr(a, b)
+#  define __noreturn_attr
+#endif // __GNUC__
+
 const char *vncGetDisplay(void);
 unsigned long vncGetServerGeneration(void);
 
+void vncFatalError(const char *format, ...) __printf_attr(1, 2) __noreturn_attr;
+
 int vncGetScreenCount(void);
 
 void vncGetScreenFormat(int scrIdx, int *depth, int *bpp,
index 13248f91c3739c8cf5363191bad2450e65a7ba7a..081e7febcc48a1f0ab9e7805af2b2a8c7e5d1e60 100644 (file)
@@ -436,7 +436,11 @@ void vncPostScreenResize(int scrIdx, int success, int width, int height)
 
 void vncRefreshScreenLayout(int scrIdx)
 {
-  desktop[scrIdx]->refreshScreenLayout();
+  try {
+    desktop[scrIdx]->refreshScreenLayout();
+  } catch (rdr::Exception& e) {
+    vncFatalError("%s", e.str());
+  }
 }
 
 int vncOverrideParam(const char *nameAndValue)