summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py26
1 files changed, 15 insertions, 11 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 738849d189..1d347ddc52 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -2107,25 +2107,29 @@ class Parser(multiprocessing.Process):
2107 multiprocessing.util.Finalize(None, bb.fetch.fetcher_parse_save, exitpriority=1) 2107 multiprocessing.util.Finalize(None, bb.fetch.fetcher_parse_save, exitpriority=1)
2108 2108
2109 pending = [] 2109 pending = []
2110 havejobs = True
2110 try: 2111 try:
2111 while True: 2112 while havejobs or pending:
2112 if self.quit.is_set(): 2113 if self.quit.is_set():
2113 break 2114 break
2114 2115
2115 if pending: 2116 job = None
2116 result = pending.pop() 2117 try:
2117 else: 2118 job = self.jobs.pop()
2118 try: 2119 except IndexError:
2119 job = self.jobs.pop() 2120 havejobs = False
2120 except IndexError: 2121 if job:
2121 break
2122 result = self.parse(*job) 2122 result = self.parse(*job)
2123 # Clear the siggen cache after parsing to control memory usage, its huge 2123 # Clear the siggen cache after parsing to control memory usage, its huge
2124 bb.parse.siggen.postparsing_clean_cache() 2124 bb.parse.siggen.postparsing_clean_cache()
2125 try:
2126 self.results.put(result, timeout=0.25)
2127 except queue.Full:
2128 pending.append(result) 2125 pending.append(result)
2126
2127 if pending:
2128 try:
2129 result = pending.pop()
2130 self.results.put(result, timeout=0.05)
2131 except queue.Full:
2132 pending.append(result)
2129 finally: 2133 finally:
2130 self.results.close() 2134 self.results.close()
2131 self.results.join_thread() 2135 self.results.join_thread()