XMRigd now restarts miner in a case of segfault

This commit is contained in:
BenDroid 2018-03-30 20:43:46 +02:00
parent 94e59b1744
commit 93ef680a21

View file

@ -24,13 +24,13 @@
#include <stdlib.h> #include <stdlib.h>
#include <string> #include <string>
#include <chrono>
#include <thread>
#ifdef WIN32 #ifdef WIN32
#define WIN32_LEAN_AND_MEAN /* avoid including junk */ #define WIN32_LEAN_AND_MEAN /* avoid including junk */
#include <windows.h> #include <windows.h>
#include <signal.h> #include <signal.h>
#include <chrono>
#include <thread>
#else #else
#include <sys/wait.h> #include <sys/wait.h>
#include <errno.h> #include <errno.h>
@ -71,14 +71,24 @@ int main(int argc, char **argv) {
do { do {
status = system(xmrigMinerPath.c_str()); status = system(xmrigMinerPath.c_str());
if (WEXITSTATUS(status) == 139) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
printf("Restarting.");
}
#if defined(_WIN32) || defined(WIN32) #if defined(_WIN32) || defined(WIN32)
} while (status == EINTR); } while (status == EINTR || status == 139);
if (WEXITSTATUS(status) == 139) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
printf("Restarting.");
}
if (status == EINVAL) { if (status == EINVAL) {
std::this_thread::sleep_for(std::chrono::milliseconds(5000)); std::this_thread::sleep_for(std::chrono::milliseconds(5000));
} }
#else #else
} while (WEXITSTATUS(status) == EINTR); } while (WEXITSTATUS(status) == EINTR || WEXITSTATUS(status) == 139); // segfault
#endif #endif
} }