diff options
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 7c0c5d4efa..f435b18c87 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -1613,7 +1613,7 @@ class BBCooker: | |||
1613 | 1613 | ||
1614 | if self.state in (state.shutdown, state.forceshutdown, state.error): | 1614 | if self.state in (state.shutdown, state.forceshutdown, state.error): |
1615 | if hasattr(self.parser, 'shutdown'): | 1615 | if hasattr(self.parser, 'shutdown'): |
1616 | self.parser.shutdown(clean=False, force = True) | 1616 | self.parser.shutdown(clean=False) |
1617 | self.parser.final_cleanup() | 1617 | self.parser.final_cleanup() |
1618 | raise bb.BBHandledException() | 1618 | raise bb.BBHandledException() |
1619 | 1619 | ||
@@ -1741,7 +1741,7 @@ class BBCooker: | |||
1741 | self.state = state.shutdown | 1741 | self.state = state.shutdown |
1742 | 1742 | ||
1743 | if self.parser: | 1743 | if self.parser: |
1744 | self.parser.shutdown(clean=not force, force=force) | 1744 | self.parser.shutdown(clean=not force) |
1745 | self.parser.final_cleanup() | 1745 | self.parser.final_cleanup() |
1746 | 1746 | ||
1747 | def finishcommand(self): | 1747 | def finishcommand(self): |
@@ -2186,7 +2186,7 @@ class CookerParser(object): | |||
2186 | 2186 | ||
2187 | self.results = itertools.chain(self.results, self.parse_generator()) | 2187 | self.results = itertools.chain(self.results, self.parse_generator()) |
2188 | 2188 | ||
2189 | def shutdown(self, clean=True, force=False): | 2189 | def shutdown(self, clean=True): |
2190 | if not self.toparse: | 2190 | if not self.toparse: |
2191 | return | 2191 | return |
2192 | if self.haveshutdown: | 2192 | if self.haveshutdown: |
@@ -2215,11 +2215,24 @@ class CookerParser(object): | |||
2215 | break | 2215 | break |
2216 | 2216 | ||
2217 | for process in self.processes: | 2217 | for process in self.processes: |
2218 | if force: | 2218 | process.join(0.5) |
2219 | process.join(.1) | 2219 | |
2220 | for process in self.processes: | ||
2221 | if process.exitcode is None: | ||
2222 | os.kill(process.pid, signal.SIGINT) | ||
2223 | |||
2224 | for process in self.processes: | ||
2225 | process.join(0.5) | ||
2226 | |||
2227 | for process in self.processes: | ||
2228 | if process.exitcode is None: | ||
2220 | process.terminate() | 2229 | process.terminate() |
2221 | else: | 2230 | |
2222 | process.join() | 2231 | for process in self.processes: |
2232 | process.join() | ||
2233 | # Added in 3.7, cleans up zombies | ||
2234 | if hasattr(process, "close"): | ||
2235 | process.close() | ||
2223 | 2236 | ||
2224 | self.parser_quit.close() | 2237 | self.parser_quit.close() |
2225 | # Allow data left in the cancel queue to be discarded | 2238 | # Allow data left in the cancel queue to be discarded |
@@ -2296,18 +2309,18 @@ class CookerParser(object): | |||
2296 | except bb.BBHandledException as exc: | 2309 | except bb.BBHandledException as exc: |
2297 | self.error += 1 | 2310 | self.error += 1 |
2298 | logger.debug('Failed to parse recipe: %s' % exc.recipe) | 2311 | logger.debug('Failed to parse recipe: %s' % exc.recipe) |
2299 | self.shutdown(clean=False, force=True) | 2312 | self.shutdown(clean=False) |
2300 | return False | 2313 | return False |
2301 | except ParsingFailure as exc: | 2314 | except ParsingFailure as exc: |
2302 | self.error += 1 | 2315 | self.error += 1 |
2303 | logger.error('Unable to parse %s: %s' % | 2316 | logger.error('Unable to parse %s: %s' % |
2304 | (exc.recipe, bb.exceptions.to_string(exc.realexception))) | 2317 | (exc.recipe, bb.exceptions.to_string(exc.realexception))) |
2305 | self.shutdown(clean=False, force=True) | 2318 | self.shutdown(clean=False) |
2306 | return False | 2319 | return False |
2307 | except bb.parse.ParseError as exc: | 2320 | except bb.parse.ParseError as exc: |
2308 | self.error += 1 | 2321 | self.error += 1 |
2309 | logger.error(str(exc)) | 2322 | logger.error(str(exc)) |
2310 | self.shutdown(clean=False, force=True) | 2323 | self.shutdown(clean=False) |
2311 | return False | 2324 | return False |
2312 | except bb.data_smart.ExpansionError as exc: | 2325 | except bb.data_smart.ExpansionError as exc: |
2313 | self.error += 1 | 2326 | self.error += 1 |
@@ -2316,7 +2329,7 @@ class CookerParser(object): | |||
2316 | tb = list(itertools.dropwhile(lambda e: e.filename.startswith(bbdir), exc.traceback)) | 2329 | tb = list(itertools.dropwhile(lambda e: e.filename.startswith(bbdir), exc.traceback)) |
2317 | logger.error('ExpansionError during parsing %s', value.recipe, | 2330 | logger.error('ExpansionError during parsing %s', value.recipe, |
2318 | exc_info=(etype, value, tb)) | 2331 | exc_info=(etype, value, tb)) |
2319 | self.shutdown(clean=False, force=True) | 2332 | self.shutdown(clean=False) |
2320 | return False | 2333 | return False |
2321 | except Exception as exc: | 2334 | except Exception as exc: |
2322 | self.error += 1 | 2335 | self.error += 1 |
@@ -2328,7 +2341,7 @@ class CookerParser(object): | |||
2328 | # Most likely, an exception occurred during raising an exception | 2341 | # Most likely, an exception occurred during raising an exception |
2329 | import traceback | 2342 | import traceback |
2330 | logger.error('Exception during parse: %s' % traceback.format_exc()) | 2343 | logger.error('Exception during parse: %s' % traceback.format_exc()) |
2331 | self.shutdown(clean=False, force=True) | 2344 | self.shutdown(clean=False) |
2332 | return False | 2345 | return False |
2333 | 2346 | ||
2334 | self.current += 1 | 2347 | self.current += 1 |