mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-14 22:14:35 +00:00
fedabipkgdiff: Remove busy loop when forking abipkgdiff
The function abipkgdiff() introduced a busy loop instead of using subprocess.communicate() because it was randomly hanging back in the python2 days. This patch removes the busy loop altogether as I could not reproduce the hanging anymore. * tools/fedabipkgdiff (abipkgdiff): Remove the busy looping and use subprocess.communicate() instead. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
parent
216e366696
commit
197732e683
@ -1182,30 +1182,8 @@ def abipkgdiff(cmp_half1, cmp_half2):
|
||||
proc = subprocess.Popen(' '.join(cmd), shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
universal_newlines=True)
|
||||
# So we could have done: stdout, stderr = proc.communicate()
|
||||
# But then the documentatin of proc.communicate says:
|
||||
#
|
||||
# Note: The data read is buffered in memory, so do not use this
|
||||
# method if the data size is large or unlimited. "
|
||||
#
|
||||
# In practice, we are seeing random cases where this
|
||||
# proc.communicate() function does *NOT* terminate and seems to be
|
||||
# in a deadlock state. So we are avoiding it altogether. We are
|
||||
# then busy looping, waiting for the spawn process to finish, and
|
||||
# then we get its output.
|
||||
#
|
||||
|
||||
sleeptime = 0.2
|
||||
while True:
|
||||
if proc.poll() != None:
|
||||
break
|
||||
time.sleep(sleeptime)
|
||||
# cap the sleep time at 1.6s
|
||||
if sleeptime < 2.0:
|
||||
sleeptime = sleeptime * 2
|
||||
|
||||
stdout = ''.join(proc.stdout.readlines())
|
||||
stderr = ''.join(proc.stderr.readlines())
|
||||
stdout, stderr = proc.communicate()
|
||||
|
||||
is_ok = proc.returncode == ABIDIFF_OK
|
||||
is_internal_error = proc.returncode & ABIDIFF_ERROR or proc.returncode & ABIDIFF_USAGE_ERROR
|
||||
|
Loading…
Reference in New Issue
Block a user