diff --git a/src/internfile/mh_execm.cpp b/src/internfile/mh_execm.cpp index 54faeb23..79b477e8 100644 --- a/src/internfile/mh_execm.cpp +++ b/src/internfile/mh_execm.cpp @@ -172,6 +172,7 @@ bool MimeHandlerExecMultiple::next_document() obuf << "Mimetype: " << m_mimeType.length() << "\n" << m_mimeType; obuf << "\n"; if (m_cmd.send(obuf.str()) < 0) { + m_cmd.zapChild(); LOGERR(("MHExecMultiple: send error\n")); return false; } @@ -185,6 +186,7 @@ bool MimeHandlerExecMultiple::next_document() for (int loop=0;;loop++) { string name, data; if (!readDataElement(name, data)) { + m_cmd.zapChild(); return false; } if (name.empty()) diff --git a/src/utils/execmd.cpp b/src/utils/execmd.cpp index 423e5d5c..4027c977 100644 --- a/src/utils/execmd.cpp +++ b/src/utils/execmd.cpp @@ -462,9 +462,9 @@ int ExecCmd::wait(bool haderror) if (!m_killRequest && m_pid > 0) { if (waitpid(m_pid, &status, 0) < 0) status = -1; + LOGDEB(("ExecCmd::wait: got status 0x%x\n", status)); m_pid = -1; } - LOGDEB(("ExecCmd::wait: got status 0x%x\n", status)); return haderror ? -1 : status; } diff --git a/src/utils/execmd.h b/src/utils/execmd.h index b3e9da24..a7202b98 100644 --- a/src/utils/execmd.h +++ b/src/utils/execmd.h @@ -147,6 +147,11 @@ class ExecCmd { */ void setKill() {m_killRequest = true;} + /** + * Get rid of current process (become ready for start). + */ + void zapChild() {setKill(); (void)wait();} + ExecCmd() : m_advise(0), m_provide(0), m_timeoutMs(1000) {