summaryrefslogtreecommitdiff
path: root/src/config/ConfigManager.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-11-10 13:50:16 +0000
committervaxerski <vaxry@vaxry.net>2022-11-10 13:50:16 +0000
commit153c99217d70288b029e965a8c94152705dbd64a (patch)
tree74c6a7a10c68666abe54771c4de4b1cf732f3322 /src/config/ConfigManager.cpp
parent851df11eb595c5863bb931c32cbaa446c7071813 (diff)
use spawn in config exec
Diffstat (limited to 'src/config/ConfigManager.cpp')
-rw-r--r--src/config/ConfigManager.cpp57
1 files changed, 1 insertions, 56 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 12a11268..94c3bc60 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -388,62 +388,7 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s
void CConfigManager::handleRawExec(const std::string& command, const std::string& args) {
// Exec in the background dont wait for it.
-
- std::string toExec = args;
-
- if (g_pXWaylandManager->m_sWLRXWayland)
- toExec = std::string("WAYLAND_DISPLAY=") + std::string(g_pCompositor->m_szWLDisplaySocket) + " DISPLAY=" + std::string(g_pXWaylandManager->m_sWLRXWayland->display_name) + " " + toExec;
- else
- toExec = std::string("WAYLAND_DISPLAY=") + std::string(g_pCompositor->m_szWLDisplaySocket) + " " + toExec;
-
- Debug::log(LOG, "Config executing %s", toExec.c_str());
-
- int socket[2];
- if (pipe(socket) != 0) {
- Debug::log(LOG, "Unable to create pipe for fork");
- }
-
- pid_t child, grandchild;
- child = fork();
- if (child < 0) {
- close(socket[0]);
- close(socket[1]);
- Debug::log(LOG, "Fail to create the first fork");
- return;
- }
- if (child == 0) {
- // run in child
- grandchild = fork();
-
- sigset_t set;
- sigemptyset(&set);
- sigprocmask(SIG_SETMASK, &set, NULL);
-
- if (grandchild == 0) {
- // run in grandchild
- close(socket[0]);
- close(socket[1]);
- execl("/bin/sh", "/bin/sh", "-c", toExec.c_str(), nullptr);
- // exit grandchild
- _exit(0);
- }
- close(socket[0]);
- write(socket[1], &grandchild, sizeof(grandchild));
- close(socket[1]);
- // exit child
- _exit(0);
- }
- // run in parent
- close(socket[1]);
- read(socket[0], &grandchild, sizeof(grandchild));
- close(socket[0]);
- // clear child and leave child to init
- waitpid(child, NULL, 0);
- if (child < 0) {
- Debug::log(LOG, "Fail to create the second fork");
- return;
- }
- Debug::log(LOG, "Process created with pid %d", grandchild);
+ g_pKeybindManager->spawn(args);
}
void CConfigManager::handleMonitor(const std::string& command, const std::string& args) {