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() |
