1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-01-30 08:24:26 +00:00

Perform execv in a forked child process, waiting on the original to exit to allow resources to be released.

This commit is contained in:
Con Kolivas 2013-05-30 12:00:17 +10:00
parent dd534a8692
commit b0fa94d52a

View File

@ -2889,6 +2889,9 @@ static void clean_up(void);
void app_restart(void)
{
pid_t parent, child;
int status;
applog(LOG_WARNING, "Attempting to restart %s", packagename);
__kill_work();
@ -2901,7 +2904,15 @@ void app_restart(void)
}
#endif
parent = getpid();
child = fork();
if (child) {
applog(LOG_WARNING, "Shutting down original process");
exit(0);
}
waitpid(parent, &status, 0);
execv(initial_args[0], (EXECV_2ND_ARG_TYPE)initial_args);
/* We shouldn't get here */
applog(LOG_WARNING, "Failed to restart application");
}