After a call to expireTimeout(), a solver cannot be relaunched
Once an expireTimeout() is performed, the solver state is in the "should stop" mode and a TimeoutException is launched whenever a call to isSatisfiable is performed.
The fix is simple: the expireTimeout should properly reset the solver state in such a way that subsequent calls to the solver (isSatisfiable() methods) are properly handled.
That issue as a nasty side effect on the MultiCore solver: it will prevent the various systems to be used after the first call to expireTimeout.