summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/server/process.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 2a9fb6623c..3668a32b71 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -28,6 +28,7 @@ import datetime
28import pickle 28import pickle
29import traceback 29import traceback
30import gc 30import gc
31import stat
31import bb.server.xmlrpcserver 32import bb.server.xmlrpcserver
32from bb import daemonize 33from bb import daemonize
33from multiprocessing import queues 34from multiprocessing import queues
@@ -64,6 +65,9 @@ class ProcessServer():
64 self.bitbake_lock_name = lockname 65 self.bitbake_lock_name = lockname
65 self.sock = sock 66 self.sock = sock
66 self.sockname = sockname 67 self.sockname = sockname
68 # It is possible the directory may be renamed. Cache the inode of the socket file
69 # so we can tell if things changed.
70 self.sockinode = os.stat(self.sockname)[stat.ST_INO]
67 71
68 self.server_timeout = server_timeout 72 self.server_timeout = server_timeout
69 self.timeout = self.server_timeout 73 self.timeout = self.server_timeout
@@ -246,8 +250,14 @@ class ProcessServer():
246 250
247 serverlog("Exiting") 251 serverlog("Exiting")
248 # Remove the socket file so we don't get any more connections to avoid races 252 # Remove the socket file so we don't get any more connections to avoid races
253 # The build directory could have been renamed so if the file isn't the one we created
254 # we shouldn't delete it.
249 try: 255 try:
250 os.unlink(self.sockname) 256 sockinode = os.stat(self.sockname)[stat.ST_INO]
257 if sockinode == self.sockinode:
258 os.unlink(self.sockname)
259 else:
260 serverlog("bitbake.sock inode mismatch (%s vs %s), not deleting." % (sockinode, self.sockinode))
251 except Exception as err: 261 except Exception as err:
252 serverlog("Removing socket file '%s' failed (%s)" % (self.sockname, err)) 262 serverlog("Removing socket file '%s' failed (%s)" % (self.sockname, err))
253 self.sock.close() 263 self.sock.close()