diff options
Diffstat (limited to 'bitbake/lib/bb/server/process.py')
| -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 12498a6c47..586d46af88 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 |
| @@ -93,6 +94,9 @@ class ProcessServer(): | |||
| 93 | self.bitbake_lock_name = lockname | 94 | self.bitbake_lock_name = lockname |
| 94 | self.sock = sock | 95 | self.sock = sock |
| 95 | self.sockname = sockname | 96 | self.sockname = sockname |
| 97 | # It is possible the directory may be renamed. Cache the inode of the socket file | ||
| 98 | # so we can tell if things changed. | ||
| 99 | self.sockinode = os.stat(self.sockname)[stat.ST_INO] | ||
| 96 | 100 | ||
| 97 | self.server_timeout = server_timeout | 101 | self.server_timeout = server_timeout |
| 98 | self.timeout = self.server_timeout | 102 | self.timeout = self.server_timeout |
| @@ -276,8 +280,14 @@ class ProcessServer(): | |||
| 276 | 280 | ||
| 277 | serverlog("Exiting (socket: %s)" % os.path.exists(self.sockname)) | 281 | serverlog("Exiting (socket: %s)" % os.path.exists(self.sockname)) |
| 278 | # Remove the socket file so we don't get any more connections to avoid races | 282 | # Remove the socket file so we don't get any more connections to avoid races |
| 283 | # The build directory could have been renamed so if the file isn't the one we created | ||
| 284 | # we shouldn't delete it. | ||
| 279 | try: | 285 | try: |
| 280 | os.unlink(self.sockname) | 286 | sockinode = os.stat(self.sockname)[stat.ST_INO] |
| 287 | if sockinode == self.sockinode: | ||
| 288 | os.unlink(self.sockname) | ||
| 289 | else: | ||
| 290 | serverlog("bitbake.sock inode mismatch (%s vs %s), not deleting." % (sockinode, self.sockinode)) | ||
| 281 | except Exception as err: | 291 | except Exception as err: |
| 282 | serverlog("Removing socket file '%s' failed (%s)" % (self.sockname, err)) | 292 | serverlog("Removing socket file '%s' failed (%s)" % (self.sockname, err)) |
| 283 | self.sock.close() | 293 | self.sock.close() |
