# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1649875582 14400
#      Wed Apr 13 14:46:22 2022 -0400
# Branch stable
# Node ID 90e564882f0727ea31aa14a8bdb720bb683ce38f
# Parent  770e1352e9f94e619ac39ca0595bb75eef1bed4e
procutil: avoid `+= None` when writing to full std{err,out} descriptor on py3

The write function returns `None` if there was no room to write the given
data[1].  I don't like that this is effectively an infinite loop if there's
never any progress emptying the underlying buffer, but we're no worse off than
before, and it fixes random stacktrace popups seen in the py3 build of
TortoiseHg.

[1] https://docs.python.org/3/library/io.html#io.RawIOBase.write

Differential Revision: https://phab.mercurial-scm.org/D12555

diff --git a/mercurial/utils/procutil.py b/mercurial/utils/procutil.py
--- a/mercurial/utils/procutil.py
+++ b/mercurial/utils/procutil.py
@@ -112,7 +112,9 @@
         total_to_write = len(s)
         total_written = 0
         while total_written < total_to_write:
-            total_written += write1(m[total_written:])
+            c = write1(m[total_written:])
+            if c:
+                total_written += c
         return total_written