Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
lyx
lyx-2.0.6-fix_zombies.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File lyx-2.0.6-fix_zombies.patch of Package lyx
From 254c5fa439df319e8c71212f946ba74a104be16e Mon Sep 17 00:00:00 2001 From: Guy Rutenberg <guyrutenberg@gmail.com> Date: Sat, 6 Jul 2013 16:09:50 +0300 Subject: [PATCH] Prevent zobmie process. Using Systemcall::startscript() with Starttype::DontWait used to create zombie process, as nobody would collect them. This patch start those process as detached, hence preventing them from becoming zombies. --- src/support/Systemcall.cpp | 26 ++++++++++++++++---------- src/support/SystemcallPrivate.h | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/support/Systemcall.cpp b/src/support/Systemcall.cpp index ca80409..f689c0b 100644 --- a/src/support/Systemcall.cpp +++ b/src/support/Systemcall.cpp @@ -251,19 +251,17 @@ int Systemcall::startscript(Starttype how, string const & what, SystemcallPrivate d(outfile, errfile); - d.startProcess(cmd, path); - if (!d.waitWhile(SystemcallPrivate::Starting, process_events, -1)) { + d.startProcess(cmd, path, how == DontWait); + if (how == DontWait && d.state == SystemcallPrivate::Running) { + return 0; + } + if (d.state == SystemcallPrivate::Error + || !d.waitWhile(SystemcallPrivate::Starting, process_events, -1)) { LYXERR0("Systemcall: '" << cmd << "' did not start!"); LYXERR0("error " << d.errorMessage()); return 10; } - if (how == DontWait) { - QProcess* released = d.releaseProcess(); - (void) released; // TODO who deletes it? - return 0; - } - if (!d.waitWhile(SystemcallPrivate::Running, process_events, os::timeout_min() * 60 * 1000)) { LYXERR0("Systemcall: '" << cmd << "' did not finish!"); @@ -349,10 +347,18 @@ SystemcallPrivate::SystemcallPrivate(std::string const & sf, } -void SystemcallPrivate::startProcess(QString const & cmd, string const & path) +void SystemcallPrivate::startProcess(QString const & cmd, string const & path, bool detached) { cmd_ = cmd; - if (process_) { + if (detached) { + state = SystemcallPrivate::Running; + if (!QProcess::startDetached(toqstr(latexEnvCmdPrefix(path)) + cmd_)) { + state = SystemcallPrivate::Error; + return; + } + QProcess* released = releaseProcess(); + delete released; + } else if (process_) { state = SystemcallPrivate::Starting; process_->start(toqstr(latexEnvCmdPrefix(path)) + cmd_); } diff --git a/src/support/SystemcallPrivate.h b/src/support/SystemcallPrivate.h index b8dc17a..6534d07 100644 --- a/src/support/SystemcallPrivate.h +++ b/src/support/SystemcallPrivate.h @@ -45,7 +45,7 @@ public: State state; bool waitWhile(State, bool processEvents, int timeout = -1); - void startProcess(QString const & cmd, std::string const & path); + void startProcess(QString const & cmd, std::string const & path, bool detach); int exitCode(); -- 1.7.9.5
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor