diff options
-rw-r--r-- | bitbake/lib/bb/server/process.py | 12 |
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 | |||
28 | import pickle | 28 | import pickle |
29 | import traceback | 29 | import traceback |
30 | import gc | 30 | import gc |
31 | import stat | ||
31 | import bb.server.xmlrpcserver | 32 | import bb.server.xmlrpcserver |
32 | from bb import daemonize | 33 | from bb import daemonize |
33 | from multiprocessing import queues | 34 | from 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() |