ref: refs/heads/master
commit 33de48b0b63c19c6b48bf71d59a1fcc9ce7b857d
Author: Michael Andres
Date: Wed Jul 29 12:50:05 2009 +0200
Avoid deadlock after fork and failed exec. (bnc 493152)
---
zypp/ExternalProgram.cc | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/zypp/ExternalProgram.cc b/zypp/ExternalProgram.cc
index 22979d0..522126a 100644
--- a/zypp/ExternalProgram.cc
+++ b/zypp/ExternalProgram.cc
@@ -237,6 +237,9 @@ namespace zypp {
// Create module process
if ((pid = fork()) == 0)
{
+ //////////////////////////////////////////////////////////////////////
+ // Don't write to the logfile after fork!
+ //////////////////////////////////////////////////////////////////////
if (use_pty)
{
setsid();
@@ -292,14 +295,12 @@ namespace zypp {
if(chroot(root) == -1)
{
_execError = str::form( _("Can't chroot to '%s' (%s)."), root, strerror(errno) );
- ERR << _execError << endl;
std::cerr << _execError << endl;// After fork log on stderr too
_exit (128); // No sense in returning! I am forked away!!
}
if(chdir("/") == -1)
{
_execError = str::form( _("Can't chdir to '/' inside chroot (%s)."), strerror(errno) );
- ERR << _execError << endl;
std::cerr << _execError << endl;// After fork log on stderr too
_exit (128); // No sense in returning! I am forked away!!
}
@@ -313,9 +314,9 @@ namespace zypp {
execvp(argv[0], const_cast(argv));
// don't want to get here
_execError = str::form( _("Can't exec '%s' (%s)."), argv[0], strerror(errno) );
- ERR << _execError << endl;
std::cerr << _execError << endl;// After fork log on stderr too
_exit (129); // No sense in returning! I am forked away!!
+ //////////////////////////////////////////////////////////////////////
}
else if (pid == -1) // Fork failed, close everything.
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org