core/ipc: add ipc server/client

Currently can only kill a remote instance.
This commit is contained in:
outfoxxed 2024-08-30 21:45:20 -07:00
parent 13b6eeaa22
commit da043e092a
Signed by untrusted user: outfoxxed
GPG key ID: 4C88A185FB89301E
14 changed files with 710 additions and 120 deletions

View file

@ -14,7 +14,7 @@
#include <sys/mman.h>
#include <unistd.h>
#include "../core/crashinfo.hpp"
#include "../core/instanceinfo.hpp"
extern char** environ; // NOLINT
@ -64,7 +64,7 @@ void CrashHandler::init() {
qCInfo(logCrashHandler) << "Crash handler initialized.";
}
void CrashHandler::setInstanceInfo(const InstanceInfo& info) {
void CrashHandler::setInstanceInfo(const RelaunchInfo& info) {
this->d->infoFd = memfd_create("quickshell:instance_info", MFD_CLOEXEC);
if (this->d->infoFd == -1) {

View file

@ -2,7 +2,7 @@
#include <qtclasshelpermacros.h>
#include "../core/crashinfo.hpp"
#include "../core/instanceinfo.hpp"
namespace qs::crash {
struct CrashHandlerPrivate;
@ -14,7 +14,7 @@ public:
Q_DISABLE_COPY_MOVE(CrashHandler);
void init();
void setInstanceInfo(const InstanceInfo& info);
void setInstanceInfo(const RelaunchInfo& info);
private:
CrashHandlerPrivate* d;

View file

@ -5,7 +5,6 @@
#include <qapplication.h>
#include <qconfig.h>
#include <qdatastream.h>
#include <qdatetime.h>
#include <qdir.h>
#include <qfile.h>
#include <qlogging.h>
@ -15,7 +14,7 @@
#include <sys/sendfile.h>
#include <sys/types.h>
#include "../core/crashinfo.hpp"
#include "../core/instanceinfo.hpp"
#include "../core/logging.hpp"
#include "../core/paths.hpp"
#include "build.hpp"
@ -23,14 +22,14 @@
Q_LOGGING_CATEGORY(logCrashReporter, "quickshell.crashreporter", QtWarningMsg);
void recordCrashInfo(const QDir& crashDir, const InstanceInfo& instanceInfo);
void recordCrashInfo(const QDir& crashDir, const InstanceInfo& instance);
void qsCheckCrash(int argc, char** argv) {
auto fd = qEnvironmentVariable("__QUICKSHELL_CRASH_DUMP_FD");
if (fd.isEmpty()) return;
auto app = QApplication(argc, argv);
InstanceInfo instance;
RelaunchInfo info;
auto crashProc = qEnvironmentVariable("__QUICKSHELL_CRASH_DUMP_PID").toInt();
@ -42,15 +41,15 @@ void qsCheckCrash(int argc, char** argv) {
file.seek(0);
auto ds = QDataStream(&file);
ds >> instance;
ds >> info;
}
LogManager::init(!instance.noColor, false);
auto crashDir = QsPaths::crashDir(instance.shellId, instance.launchTime);
LogManager::init(!info.noColor, false);
auto crashDir = QsPaths::crashDir(info.instance.instanceId);
qCInfo(logCrashReporter) << "Starting crash reporter...";
recordCrashInfo(crashDir, instance);
recordCrashInfo(crashDir, info.instance);
auto gui = CrashReporterGui(crashDir.path(), crashProc);
gui.show();
@ -125,8 +124,7 @@ void recordCrashInfo(const QDir& crashDir, const InstanceInfo& instance) {
stream << "===== Quickshell Crash =====\n";
stream << "Git Revision: " << GIT_REVISION << '\n';
stream << "Crashed process ID: " << crashProc << '\n';
stream << "Run ID: " << QString("run-%1").arg(instance.launchTime.toMSecsSinceEpoch())
<< '\n';
stream << "Run ID: " << instance.instanceId << '\n';
stream << "\n===== Shell Information =====\n";
stream << "Shell ID: " << instance.shellId << '\n';