From 16d14a25a62b227d85a1139d7afbc84e6fb48eb8 Mon Sep 17 00:00:00 2001 From: Karlson2k Date: Fri, 12 Dec 2014 22:55:26 +0300 Subject: [PATCH] WebServer: add and use panic handler for MHD --- xbmc/network/WebServer.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/xbmc/network/WebServer.cpp b/xbmc/network/WebServer.cpp index e51b87672b4f0..53f30a07a31f9 100644 --- a/xbmc/network/WebServer.cpp +++ b/xbmc/network/WebServer.cpp @@ -27,6 +27,7 @@ #ifdef HAS_WEB_SERVER #include #include +#include #include "URL.h" #include "Util.h" @@ -1035,6 +1036,14 @@ void CWebServer::ContentReaderFreeCallback(void *cls) #endif } +// local helper +static void panicHandlerForMHD(void* unused, const char* file, unsigned int line, const char *reason) +{ + CLog::Log(LOGSEVERE, "CWebServer: MHD serious error: reason \"%s\" in file \"%s\" at line %ui", reason ? reason : "", + file ? file : "", line); + throw std::runtime_error("MHD serious error"); // FIXME: better solution? +} + // local helper static void logFromMHD(void* unused, const char* fmt, va_list ap) { @@ -1060,6 +1069,10 @@ struct MHD_Daemon* CWebServer::StartMHD(unsigned int flags, int port) { unsigned int timeout = 60 * 60 * 24; +#if MHD_VERSION >= 0x00040500 + MHD_set_panic_func(&panicHandlerForMHD, NULL); +#endif + return MHD_start_daemon(flags | #if (MHD_VERSION >= 0x00040002) && (MHD_VERSION < 0x00090B01) // use main thread for each connection, can only handle one request at a