mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 09:00:44 +00:00
Add SIGINT signal handler on linux to cleanly shutdown replay host
This commit is contained in:
@@ -31,6 +31,9 @@
|
||||
using std::string;
|
||||
using std::wstring;
|
||||
|
||||
bool usingKillSignal = false;
|
||||
volatile uint32_t killSignal = false;
|
||||
|
||||
void readCapOpts(const std::string &str, CaptureOptions *opts)
|
||||
{
|
||||
if(str.length() < sizeof(CaptureOptions))
|
||||
@@ -403,12 +406,15 @@ struct ReplayHostCommand : public Command
|
||||
string host = parser.get<string>("host");
|
||||
uint32_t port = parser.get<uint32_t>("port");
|
||||
|
||||
volatile bool32 kill = false;
|
||||
|
||||
std::cerr << "Spawning a replay host listening on " << (host.empty() ? "*" : host) << ":"
|
||||
<< port << "..." << std::endl;
|
||||
|
||||
RENDERDOC_SpawnReplayHost(host.empty() ? NULL : host.c_str(), port, &kill);
|
||||
usingKillSignal = true;
|
||||
|
||||
RENDERDOC_SpawnReplayHost(host.empty() ? NULL : host.c_str(), port, &killSignal);
|
||||
|
||||
std::cerr << std::endl << "Cleaning up from replay hosting." << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
@@ -449,6 +455,9 @@ struct ReplayCommand : public Command
|
||||
|
||||
if(parser.exist("remote-host"))
|
||||
{
|
||||
std::cout << "Replaying '" << filename << "' on " << parser.get<string>("remote-host") << ":"
|
||||
<< parser.get<uint32_t>("remote-port") << "." << std::endl;
|
||||
|
||||
ReplayCreateStatus status = RENDERDOC_CreateRemoteReplayConnection(
|
||||
parser.get<string>("remote-host").c_str(), parser.get<uint32_t>("remote-port"), &remote);
|
||||
|
||||
@@ -476,6 +485,8 @@ struct ReplayCommand : public Command
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Replaying '" << filename << "' locally.." << std::endl;
|
||||
|
||||
ReplayCreateStatus status =
|
||||
RENDERDOC_CreateReplayRenderer(filename.c_str(), &progress, &renderer);
|
||||
|
||||
|
||||
@@ -47,6 +47,9 @@ struct Command
|
||||
virtual bool IsCaptureCommand() = 0;
|
||||
};
|
||||
|
||||
extern bool usingKillSignal;
|
||||
extern volatile uint32_t killSignal;
|
||||
|
||||
void add_command(const std::string &name, Command *cmd);
|
||||
void add_alias(const std::string &alias, const std::string &command);
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <iconv.h>
|
||||
#include <locale.h>
|
||||
#include <replay/renderdoc_replay.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <xcb/xcb.h>
|
||||
@@ -134,6 +135,14 @@ void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg
|
||||
// be resolved and libGL wouldn't link, meaning dlsym(RTLD_NEXT) would fai
|
||||
extern "C" void glXWaitGL();
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if(usingKillSignal)
|
||||
killSignal = true;
|
||||
else
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
std::setlocale(LC_CTYPE, "");
|
||||
@@ -142,6 +151,8 @@ int main(int argc, char *argv[])
|
||||
if(never_run)
|
||||
glXWaitGL();
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
// do any linux-specific setup here
|
||||
|
||||
// process any linux-specific arguments here
|
||||
|
||||
Reference in New Issue
Block a user