X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9808383ef39f0d038f0c1cbd629e8020613d49a7..da08806fbfea06d179dd8fd6a8e78430b1cb5650:/main/bsod.cpp diff --git a/main/bsod.cpp b/main/bsod.cpp index dd274eca..d0d2ec7e 100644 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -7,6 +7,8 @@ #include #include +#include "version.h" + /************************************************/ #define CRASH_EMAILADDR "crashlog@dream-multimedia-tv.de" @@ -72,6 +74,14 @@ void bsodFatal() { time_t t = time(0); fprintf(f, "enigma2 crashed on %s", ctime(&t)); +#ifdef ENIGMA2_CHECKOUT_TAG + fprintf(f, "enigma2 CVS TAG: " ENIGMA2_CHECKOUT_TAG "\n"); +#else + fprintf(f, "enigma2 compiled on " __DATE__ "\n"); +#endif +#ifdef ENIGMA2_CHECKOUT_ROOT + fprintf(f, "enigma2 checked out from " ENIGMA2_CHECKOUT_ROOT "\n"); +#endif fprintf(f, "please email this file to " CRASH_EMAILADDR "\n"); std::string buffer = getLogBuffer(); fwrite(buffer.c_str(), buffer.size(), 1, f); @@ -83,6 +93,7 @@ void bsodFatal() { gPainter p(my_dc); + p.resetOffset(); p.resetClip(eRect(ePoint(0, 0), my_dc->size())); p.setBackgroundColor(gRGB(0x0000C0)); p.setForegroundColor(gRGB(0xFFFFFF)); @@ -91,16 +102,17 @@ void bsodFatal() p.setFont(font); p.clear(); - eRect usable_area = eRect(100, 70, my_dc->size().width() - 200, 100); + eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100); p.renderText(usable_area, "We are really sorry. Something happened " "which should not have happened, and " "resulted in a crash. If you want to help " "us in improving this situation, please send " - "the logfile created in /hdd/ to " CRASH_EMAILADDR ".", gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); + "the logfile created in /hdd/ to " CRASH_EMAILADDR "." + "Your receiver restarts in 10 seconds !", gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); - usable_area = eRect(100, 170, my_dc->size().width() - 200, my_dc->size().height() - 20); + usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20); int i; @@ -120,6 +132,8 @@ void bsodFatal() p.renderText(usable_area, lines.substr(start), gPainter::RT_HALIGN_LEFT); + p.flush(); + sleep(10); } raise(SIGKILL); @@ -152,7 +166,7 @@ void bsodCatchSignals() struct sigaction act; act.sa_handler = SIG_DFL; act.sa_sigaction = handleFatalSignal; - act.sa_flags = 0; + act.sa_flags = SA_RESTART | SA_SIGINFO; if (sigemptyset(&act.sa_mask) == -1) perror("sigemptyset");