diff options
| -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 |
