summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-01-05 07:43:20 -0800
committerZac Medico <zmedico@gentoo.org>2013-01-05 07:43:20 -0800
commitd916da77dfc94eb30c6f512f9d7d727a8f28600c (patch)
tree235996cc941a3ac64a62c19f66b066574153e6f9
parente893125da2f260c73ac728c5f027113ef9aa2f73 (diff)
downloadportage-d916da77dfc94eb30c6f512f9d7d727a8f28600c.tar.gz
portage-d916da77dfc94eb30c6f512f9d7d727a8f28600c.tar.bz2
portage-d916da77dfc94eb30c6f512f9d7d727a8f28600c.zip
Handle os.write() return code with loop.
-rw-r--r--pym/portage/dbapi/vartree.py4
-rw-r--r--pym/portage/util/_async/PipeLogger.py10
2 files changed, 7 insertions, 7 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index beff5bdc6..ba149b745 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -3463,7 +3463,9 @@ class dblink(object):
str_buffer.append(' '.join(fields))
str_buffer.append('\n')
if str_buffer:
- os.write(self._pipe, _unicode_encode(''.join(str_buffer)))
+ str_buffer = _unicode_encode(''.join(str_buffer))
+ while str_buffer:
+ str_buffer = str_buffer[os.write(self._pipe, str_buffer):]
def _emerge_log(self, msg):
emergelog(False, msg)
diff --git a/pym/portage/util/_async/PipeLogger.py b/pym/portage/util/_async/PipeLogger.py
index 376ebfef7..5464879ff 100644
--- a/pym/portage/util/_async/PipeLogger.py
+++ b/pym/portage/util/_async/PipeLogger.py
@@ -86,14 +86,12 @@ class PipeLogger(AbstractPollTask):
else:
if not background and stdout_fd is not None:
- write_successful = False
failures = 0
- while True:
+ stdout_buf = buf
+ while stdout_buf:
try:
- if not write_successful:
- os.write(stdout_fd, buf)
- write_successful = True
- break
+ stdout_buf = \
+ stdout_buf[os.write(stdout_fd, stdout_buf):]
except OSError as e:
if e.errno != errno.EAGAIN:
raise