changeset 21141:34368609f62b

fix event-queue and unwind-protect exception warnings * event-queue.h (event_queue_safe::warn_unhandled_exception): New function. (event_queue_safe::gripe_exception): Delete decl. * event-queue.cc: New file. (event_queue_safe::warn_unhandled_exception): New function. * libinterp/corefcn/module.mk (COREFCN_SRC): Add it to the list * unwind-prot.cc, unwind-prot.h (unwind_protect_safe::warn_unhandled_exception): Rename from unwind_protect_safe::warn_unhandled_exception. No longer static.
author John W. Eaton <jwe@octave.org>
date Mon, 25 Jan 2016 19:39:58 -0500
parents e06e600f396a
children 76e0ef020dae
files libinterp/corefcn/event-queue.cc libinterp/corefcn/event-queue.h libinterp/corefcn/module.mk liboctave/util/unwind-prot.cc liboctave/util/unwind-prot.h
diffstat 5 files changed, 46 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libinterp/corefcn/event-queue.cc	Mon Jan 25 19:39:58 2016 -0500
@@ -0,0 +1,36 @@
+/*
+
+Copyright (C) 2016 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "error.h"
+#include "event-queue.h"
+
+void
+event_queue_safe::warn_unhandled_exception (void) const
+{
+  warning ("unhandled exception in event_queue_safe handler.  "
+           "It is a bug in Octave for this to happen.  "
+           "Please help improve Octave by reporting it.");
+}
--- a/libinterp/corefcn/event-queue.h	Mon Jan 25 19:16:31 2016 -0500
+++ b/libinterp/corefcn/event-queue.h	Mon Jan 25 19:39:58 2016 -0500
@@ -92,7 +92,7 @@
 {
 private:
 
-  static void gripe_exception (void);
+  void warn_unhandled_exception (void) const;
 
 public:
 
@@ -108,7 +108,7 @@
           }
         catch (...) // Yes, the black hole. Remember we're in a dtor.
           {
-            gripe_exception ();
+            warn_unhandled_exception ();
           }
       }
   }
--- a/libinterp/corefcn/module.mk	Mon Jan 25 19:16:31 2016 -0500
+++ b/libinterp/corefcn/module.mk	Mon Jan 25 19:39:58 2016 -0500
@@ -145,6 +145,7 @@
   libinterp/corefcn/ellipj.cc \
   libinterp/corefcn/error.cc \
   libinterp/corefcn/errwarn.cc \
+  libinterp/corefcn/event-queue.cc \
   libinterp/corefcn/fft.cc \
   libinterp/corefcn/fft2.cc \
   libinterp/corefcn/fftn.cc \
--- a/liboctave/util/unwind-prot.cc	Mon Jan 25 19:16:31 2016 -0500
+++ b/liboctave/util/unwind-prot.cc	Mon Jan 25 19:39:58 2016 -0500
@@ -29,10 +29,10 @@
 #include "unwind-prot.h"
 
 void
-unwind_protect_safe::err_unhandled_exception (void)
+unwind_protect_safe::warn_unhandled_exception (void) const
 {
-  // FIXME: can this throw an exception?
-  //        Yes, it can now (1/18/16).  Maybe this needs to be re-done?
-  (*current_liboctave_error_handler)
-    ("internal: unhandled exception in unwind_protect handler");
+  (*current_liboctave_warning_handler)
+    ("unhandled exception in unwind_protect_safe handler.  "
+     "It is a bug in Octave for this to happen.  "
+     "Please help improve Octave by reporting it.");
 }
--- a/liboctave/util/unwind-prot.h	Mon Jan 25 19:16:31 2016 -0500
+++ b/liboctave/util/unwind-prot.h	Mon Jan 25 19:39:58 2016 -0500
@@ -117,7 +117,7 @@
 {
 private:
 
-  static void err_unhandled_exception (void);
+  void warn_unhandled_exception (void) const;
 
 public:
 
@@ -133,7 +133,7 @@
           }
         catch (...) // Yes, the black hole.  Remember we're in a destructor.
           {
-            err_unhandled_exception ();
+            warn_unhandled_exception ();
           }
       }
   }