Browse Source

fix double ref and case of exceptions that are not std::exception

Kai Aoki 3 years ago
parent
commit
d4ab2fa0e6
1 changed files with 9 additions and 3 deletions
  1. 9 3
      httplib.h

+ 9 - 3
httplib.h

@@ -616,7 +616,7 @@ public:
   using Handler = std::function<void(const Request &, Response &)>;
 
   using ExceptionHandler =
-      std::function<void(const Request &, Response &, std::exception_ptr &ep)>;
+      std::function<void(const Request &, Response &, std::exception_ptr ep)>;
 
   enum class HandlerResponse {
     Handled,
@@ -5741,8 +5741,14 @@ Server::process_request(Stream &strm, bool close_connection,
       res.set_header("EXCEPTION_WHAT", e.what());
     }
   } catch (...) {
-    res.status = 500;
-    res.set_header("EXCEPTION_WHAT", "UNKNOWN");
+    if (exception_handler_) {
+      auto ep = std::current_exception();
+      exception_handler_(req, res, ep);
+      routed = true;
+    } else {
+      res.status = 500;
+      res.set_header("EXCEPTION_WHAT", "UNKNOWN");
+    }
   }
 #endif