diff options
Diffstat (limited to 'bitbake/lib/bb/server')
-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() |