diff options
-rw-r--r-- | bitbake/lib/bb/cooker.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index c952c57483..e2a5dc43a9 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -2214,24 +2214,28 @@ class CookerParser(object): | |||
2214 | yield not cached, mc, infos | 2214 | yield not cached, mc, infos |
2215 | 2215 | ||
2216 | def parse_generator(self): | 2216 | def parse_generator(self): |
2217 | while self.processes: | 2217 | empty = False |
2218 | while self.processes or not empty: | ||
2219 | for process in self.processes.copy(): | ||
2220 | if not process.is_alive(): | ||
2221 | process.join() | ||
2222 | self.processes.remove(process) | ||
2223 | |||
2218 | if self.parsed >= self.toparse: | 2224 | if self.parsed >= self.toparse: |
2219 | break | 2225 | break |
2220 | 2226 | ||
2221 | try: | 2227 | try: |
2222 | result = self.result_queue.get(timeout=0.25) | 2228 | result = self.result_queue.get(timeout=0.25) |
2223 | except queue.Empty: | 2229 | except queue.Empty: |
2230 | empty = True | ||
2224 | pass | 2231 | pass |
2225 | else: | 2232 | else: |
2233 | empty = False | ||
2226 | value = result[1] | 2234 | value = result[1] |
2227 | if isinstance(value, BaseException): | 2235 | if isinstance(value, BaseException): |
2228 | raise value | 2236 | raise value |
2229 | else: | 2237 | else: |
2230 | yield result | 2238 | yield result |
2231 | for process in self.processes.copy(): | ||
2232 | if not process.is_alive(): | ||
2233 | process.join() | ||
2234 | self.processes.remove(process) | ||
2235 | 2239 | ||
2236 | if not (self.parsed >= self.toparse): | 2240 | if not (self.parsed >= self.toparse): |
2237 | raise bb.parse.ParseError("Not all recipes parsed, parser thread killed/died? Exiting.", None) | 2241 | raise bb.parse.ParseError("Not all recipes parsed, parser thread killed/died? Exiting.", None) |