diff options
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 26 |
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() |
