-
Notifications
You must be signed in to change notification settings - Fork 487
Open
Labels
Description
It seems that once a state goes from busy to killed, the worker handling that state will not take another one. This cases are not so rare to happen, for instance:
manticore/manticore/platforms/evm.py
Lines 1244 to 1257 in 3da969b
| elif issymbolic(should_check_jumpdest): | |
| self._publish("will_solve", self.constraints, should_check_jumpdest, "get_all_values") | |
| should_check_jumpdest_solutions = SelectedSolver.instance().get_all_values( | |
| self.constraints, should_check_jumpdest | |
| ) | |
| self._publish( | |
| "did_solve", | |
| self.constraints, | |
| should_check_jumpdest, | |
| "get_all_values", | |
| should_check_jumpdest_solutions, | |
| ) | |
| if len(should_check_jumpdest_solutions) != 1: | |
| raise EthereumError("Conditional not concretized at JMPDEST check") |
This impacts the use of manticore on larger targets that require to run for a while, since it is likely that some workers will stop degrading the overall performance of our tool. Also, in the extreme case, where manticore is configured with one worker, it will hang forever (until the user press ctrl+c or the process gets killed)