summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-12-24 16:32:18 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-12-26 11:10:26 +0000
commitd5b0a9a302ac0eafa4f797ac15ea77db87e82b3c (patch)
tree7dc428d9aaaeea237c070fb547eb2ade0ece9abe
parent0774e6e03d27adb7aca6fa9c47ab6ad426c937de (diff)
downloadbitbake-contrib-d5b0a9a302ac0eafa4f797ac15ea77db87e82b3c.tar.gz
bitbake-contrib-d5b0a9a302ac0eafa4f797ac15ea77db87e82b3c.tar.bz2
bitbake-contrib-d5b0a9a302ac0eafa4f797ac15ea77db87e82b3c.zip
process: Handle EWOULDBLOCK in socket connect
Now that we set a timeout for the socket, it can return EWOULDBLOCK if a signal or other event happens to wake up even if we don't timeout. If this happens, retry the connection, else we simply see it quickly loop through the retries and abort the connection in a very short interval. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/server/process.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py
index f1fbe3313c..1e4b51e35e 100644
--- a/lib/bb/server/process.py
+++ b/lib/bb/server/process.py
@@ -479,7 +479,14 @@ def connectProcessServer(sockname, featureset):
try:
try:
os.chdir(os.path.dirname(sockname))
- sock.connect(os.path.basename(sockname))
+ finished = False
+ while not finished:
+ try:
+ sock.connect(os.path.basename(sockname))
+ finished = True
+ except IOError as e:
+ if e.errno == errno.EWOULDBLOCK:
+ pass
finally:
os.chdir(cwd)