Hello community, here is the log from the commit of package enigmail for openSUSE:Factory checked in at 2017-07-10 11:07:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/enigmail (Old) and /work/SRC/openSUSE:Factory/.enigmail.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "enigmail" Mon Jul 10 11:07:49 2017 rev:16 rq:509037 version:1.9.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/enigmail/enigmail.changes 2017-07-06 00:04:31.340808085 +0200 +++ /work/SRC/openSUSE:Factory/.enigmail.new/enigmail.changes 2017-07-10 11:07:49.748526521 +0200 @@ -1,0 +2,6 @@ +Sun Jul 9 14:43:40 UTC 2017 - [email protected] + +- enigmail 1.9.8.1: + * handle EINTR cases of child process terminations + +------------------------------------------------------------------- Old: ---- enigmail-1.9.8.tar.gz enigmail-1.9.8.tar.gz.asc New: ---- enigmail-1.9.8.1.tar.gz enigmail-1.9.8.1.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ enigmail.spec ++++++ --- /var/tmp/diff_new_pack.HMqEn6/_old 2017-07-10 11:07:50.420431636 +0200 +++ /var/tmp/diff_new_pack.HMqEn6/_new 2017-07-10 11:07:50.420431636 +0200 @@ -18,7 +18,7 @@ Name: enigmail -Version: 1.9.8 +Version: 1.9.8.1 Release: 0 Summary: OpenPGP addon for Thunderbird and SeaMonkey License: MPL-2.0 ++++++ enigmail-1.9.8.tar.gz -> enigmail-1.9.8.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/Makefile new/enigmail/Makefile --- old/enigmail/Makefile 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/Makefile 2017-07-08 10:16:24.000000000 +0200 @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. XPI_MODULE = enigmail -XPI_MODULE_VERS = 1.9.8 +XPI_MODULE_VERS = 1.9.8.1 DEPTH = . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ipc/modules/enigmailprocess_shared_win.js new/enigmail/ipc/modules/enigmailprocess_shared_win.js --- old/enigmail/ipc/modules/enigmailprocess_shared_win.js 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/ipc/modules/enigmailprocess_shared_win.js 2017-07-08 10:16:24.000000000 +0200 @@ -69,6 +69,8 @@ }); Object.assign(win32, { + INVALID_HANDLE_VALUE: ctypes.cast(ctypes.int64_t(-1), win32.HANDLE), + NULL_HANDLE_VALUE: ctypes.cast(ctypes.uintptr_t(0), win32.HANDLE), CREATE_SUSPENDED: 0x00000004, CREATE_NEW_CONSOLE: 0x00000010, CREATE_UNICODE_ENVIRONMENT: 0x00000400, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ipc/modules/enigmailprocess_worker_unix.js new/enigmail/ipc/modules/enigmailprocess_worker_unix.js --- old/enigmail/ipc/modules/enigmailprocess_worker_unix.js 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/ipc/modules/enigmailprocess_worker_unix.js 2017-07-08 10:16:24.000000000 +0200 @@ -488,22 +488,29 @@ let status = ctypes.int(); let res = libc.waitpid(this.pid, status.address(), LIBC.WNOHANG); - if (res == this.pid) { - let sig = unix.WTERMSIG(status.value); - if (sig) { - this.exitCode = -sig; - } - else { - this.exitCode = unix.WEXITSTATUS(status.value); - } - - this.fd.dispose(); - io.updatePollFds(); - this.resolveExit(this.exitCode); - return this.exitCode; - } - else + + const EINTR = 4; // TODO: change to LIBC.EINTR with TB 59 + + // If there's a failure here and we get any errno other than EINTR, it + // means that the process has been reaped by another thread (most likely + // the nspr process wait thread), and its actual exit status is not + // available to us. In that case, we have to assume success. + if (res == 0 || (res == -1 && ctypes.errno == EINTR)) { return null; + } + + let sig = unix.WTERMSIG(status.value); + if (sig) { + this.exitCode = -sig; + } + else { + this.exitCode = unix.WEXITSTATUS(status.value); + } + + this.fd.dispose(); + io.updatePollFds(); + this.resolveExit(this.exitCode); + return this.exitCode; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ipc/modules/enigmailprocess_worker_win.js new/enigmail/ipc/modules/enigmailprocess_worker_win.js --- old/enigmail/ipc/modules/enigmailprocess_worker_win.js 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/ipc/modules/enigmailprocess_worker_win.js 2017-07-08 10:16:24.000000000 +0200 @@ -406,14 +406,22 @@ srcHandle = libc.GetStdHandle(win32.STD_ERROR_HANDLE); } - let handle = win32.HANDLE(); + // If we don't have a valid stderr handle, just pass it along without duplicating. + if (String(srcHandle) == win32.INVALID_HANDLE_VALUE || + String(srcHandle) == win32.NULL_HANDLE_VALUE) { + their_pipes[2] = srcHandle; + } + else { + + let handle = win32.HANDLE(); - let curProc = libc.GetCurrentProcess(); - let ok = libc.DuplicateHandle(curProc, srcHandle, curProc, handle.address(), - 0, true /* inheritable */ , - win32.DUPLICATE_SAME_ACCESS); + let curProc = libc.GetCurrentProcess(); + let ok = libc.DuplicateHandle(curProc, srcHandle, curProc, handle.address(), + 0, true /* inheritable */ , + win32.DUPLICATE_SAME_ACCESS); - their_pipes[2] = ok && win32.Handle(handle); + their_pipes[2] = ok && win32.Handle(handle); + } } if (!their_pipes.every(handle => handle)) { @@ -478,7 +486,7 @@ args = args.map(arg => this.quoteString(arg)); } - if (/\.bat$/i.test(command)) { + if (/\.(bat|cmd)$/i.test(command)) { command = io.comspec; args = ["cmd.exe", "/s/c", `"${args.join(" ")}"`]; } @@ -529,7 +537,10 @@ procInfo.address()); for (let handle of new Set(handles)) { - handle.dispose(); + // If any of our handles are invalid, they don't have finalizers. + if (handle && handle.dispose) { + handle.dispose(); + } } if (threadAttrs) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ipc/modules/subprocess.jsm new/enigmail/ipc/modules/subprocess.jsm --- old/enigmail/ipc/modules/subprocess.jsm 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/ipc/modules/subprocess.jsm 2017-07-08 10:16:24.000000000 +0200 @@ -249,6 +249,7 @@ .then(() => proc.wait()) .then(result => { DEBUG_LOG("Complete: " + result.exitCode + "\n"); + if (result.exitCode === null) result.exitCode = -1; resolved = result.exitCode; if (typeof options.done === "function") { try { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/install.rdf new/enigmail/package/install.rdf --- old/enigmail/package/install.rdf 2017-06-29 17:08:17.000000000 +0200 +++ new/enigmail/package/install.rdf 2017-07-08 10:16:24.000000000 +0200 @@ -5,7 +5,7 @@ <Description about="urn:mozilla:install-manifest"> <em:id>{847b3a00-7ab1-11d4-8f02-006008948af5}</em:id> - <em:version>1.9.8</em:version> + <em:version>1.9.8.1</em:version> <em:type>2</em:type> <!-- type = extension --> <em:unpack>true</em:unpack>
