diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 50475ea0cd..1029eec07a 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1318,6 +1318,16 @@ class RunQueue: | |||
1318 | self.worker = {} | 1318 | self.worker = {} |
1319 | self.fakeworker = {} | 1319 | self.fakeworker = {} |
1320 | 1320 | ||
1321 | @staticmethod | ||
1322 | def send_pickled_data(worker, data, name): | ||
1323 | msg = bytearray() | ||
1324 | msg.extend(b"<" + name.encode() + b">") | ||
1325 | pickled_data = pickle.dumps(data) | ||
1326 | msg.extend(len(pickled_data).to_bytes(4, 'big')) | ||
1327 | msg.extend(pickled_data) | ||
1328 | msg.extend(b"</" + name.encode() + b">") | ||
1329 | worker.stdin.write(msg) | ||
1330 | |||
1321 | def _start_worker(self, mc, fakeroot = False, rqexec = None): | 1331 | def _start_worker(self, mc, fakeroot = False, rqexec = None): |
1322 | logger.debug("Starting bitbake-worker") | 1332 | logger.debug("Starting bitbake-worker") |
1323 | magic = "decafbad" | 1333 | magic = "decafbad" |
@@ -1355,9 +1365,9 @@ class RunQueue: | |||
1355 | "umask" : self.cfgData.getVar("BB_DEFAULT_UMASK"), | 1365 | "umask" : self.cfgData.getVar("BB_DEFAULT_UMASK"), |
1356 | } | 1366 | } |
1357 | 1367 | ||
1358 | worker.stdin.write(b"<cookerconfig>" + pickle.dumps(self.cooker.configuration) + b"</cookerconfig>") | 1368 | RunQueue.send_pickled_data(worker, self.cooker.configuration, "cookerconfig") |
1359 | worker.stdin.write(b"<extraconfigdata>" + pickle.dumps(self.cooker.extraconfigdata) + b"</extraconfigdata>") | 1369 | RunQueue.send_pickled_data(worker, self.cooker.extraconfigdata, "extraconfigdata") |
1360 | worker.stdin.write(b"<workerdata>" + pickle.dumps(workerdata) + b"</workerdata>") | 1370 | RunQueue.send_pickled_data(worker, workerdata, "workerdata") |
1361 | worker.stdin.flush() | 1371 | worker.stdin.flush() |
1362 | 1372 | ||
1363 | return RunQueueWorker(worker, workerpipe) | 1373 | return RunQueueWorker(worker, workerpipe) |
@@ -1367,7 +1377,7 @@ class RunQueue: | |||
1367 | return | 1377 | return |
1368 | logger.debug("Teardown for bitbake-worker") | 1378 | logger.debug("Teardown for bitbake-worker") |
1369 | try: | 1379 | try: |
1370 | worker.process.stdin.write(b"<quit></quit>") | 1380 | RunQueue.send_pickled_data(worker.process, b"", "quit") |
1371 | worker.process.stdin.flush() | 1381 | worker.process.stdin.flush() |
1372 | worker.process.stdin.close() | 1382 | worker.process.stdin.close() |
1373 | except IOError: | 1383 | except IOError: |
@@ -1894,14 +1904,14 @@ class RunQueueExecute: | |||
1894 | def finish_now(self): | 1904 | def finish_now(self): |
1895 | for mc in self.rq.worker: | 1905 | for mc in self.rq.worker: |
1896 | try: | 1906 | try: |
1897 | self.rq.worker[mc].process.stdin.write(b"<finishnow></finishnow>") | 1907 | RunQueue.send_pickled_data(self.rq.worker[mc].process, b"", "finishnow") |
1898 | self.rq.worker[mc].process.stdin.flush() | 1908 | self.rq.worker[mc].process.stdin.flush() |
1899 | except IOError: | 1909 | except IOError: |
1900 | # worker must have died? | 1910 | # worker must have died? |
1901 | pass | 1911 | pass |
1902 | for mc in self.rq.fakeworker: | 1912 | for mc in self.rq.fakeworker: |
1903 | try: | 1913 | try: |
1904 | self.rq.fakeworker[mc].process.stdin.write(b"<finishnow></finishnow>") | 1914 | RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, b"", "finishnow") |
1905 | self.rq.fakeworker[mc].process.stdin.flush() | 1915 | self.rq.fakeworker[mc].process.stdin.flush() |
1906 | except IOError: | 1916 | except IOError: |
1907 | # worker must have died? | 1917 | # worker must have died? |
@@ -2196,10 +2206,10 @@ class RunQueueExecute: | |||
2196 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: | 2206 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: |
2197 | if not mc in self.rq.fakeworker: | 2207 | if not mc in self.rq.fakeworker: |
2198 | self.rq.start_fakeworker(self, mc) | 2208 | self.rq.start_fakeworker(self, mc) |
2199 | self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2209 | RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, runtask, "runtask") |
2200 | self.rq.fakeworker[mc].process.stdin.flush() | 2210 | self.rq.fakeworker[mc].process.stdin.flush() |
2201 | else: | 2211 | else: |
2202 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2212 | RunQueue.send_pickled_data(self.rq.worker[mc].process, runtask, "runtask") |
2203 | self.rq.worker[mc].process.stdin.flush() | 2213 | self.rq.worker[mc].process.stdin.flush() |
2204 | 2214 | ||
2205 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) | 2215 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
@@ -2297,10 +2307,10 @@ class RunQueueExecute: | |||
2297 | self.rq.state = runQueueFailed | 2307 | self.rq.state = runQueueFailed |
2298 | self.stats.taskFailed() | 2308 | self.stats.taskFailed() |
2299 | return True | 2309 | return True |
2300 | self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2310 | RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, runtask, "runtask") |
2301 | self.rq.fakeworker[mc].process.stdin.flush() | 2311 | self.rq.fakeworker[mc].process.stdin.flush() |
2302 | else: | 2312 | else: |
2303 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2313 | RunQueue.send_pickled_data(self.rq.worker[mc].process, runtask, "runtask") |
2304 | self.rq.worker[mc].process.stdin.flush() | 2314 | self.rq.worker[mc].process.stdin.flush() |
2305 | 2315 | ||
2306 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) | 2316 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
@@ -2502,9 +2512,9 @@ class RunQueueExecute: | |||
2502 | 2512 | ||
2503 | if changed: | 2513 | if changed: |
2504 | for mc in self.rq.worker: | 2514 | for mc in self.rq.worker: |
2505 | self.rq.worker[mc].process.stdin.write(b"<newtaskhashes>" + pickle.dumps(bb.parse.siggen.get_taskhashes()) + b"</newtaskhashes>") | 2515 | RunQueue.send_pickled_data(self.rq.worker[mc].process, bb.parse.siggen.get_taskhashes(), "newtaskhashes") |
2506 | for mc in self.rq.fakeworker: | 2516 | for mc in self.rq.fakeworker: |
2507 | self.rq.fakeworker[mc].process.stdin.write(b"<newtaskhashes>" + pickle.dumps(bb.parse.siggen.get_taskhashes()) + b"</newtaskhashes>") | 2517 | RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, bb.parse.siggen.get_taskhashes(), "newtaskhashes") |
2508 | 2518 | ||
2509 | hashequiv_logger.debug(pprint.pformat("Tasks changed:\n%s" % (changed))) | 2519 | hashequiv_logger.debug(pprint.pformat("Tasks changed:\n%s" % (changed))) |
2510 | 2520 | ||