mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 03:00:30 +00:00
A couple of stability improvements to ComputerThread
- Be more generous in what errors we catch, handling some of the more "recoverable" ones. - Should a runner crash, attempt to restart it.
This commit is contained in:
parent
114f913bf8
commit
19aca001d7
@ -133,7 +133,6 @@ public final class ComputerThread
|
||||
synchronized( threadLock )
|
||||
{
|
||||
running = true;
|
||||
if( monitor == null || !monitor.isAlive() ) (monitor = monitorFactory.newThread( new Monitor() )).start();
|
||||
|
||||
if( runners == null )
|
||||
{
|
||||
@ -158,6 +157,8 @@ public final class ComputerThread
|
||||
runnerFactory.newThread( runners[i] = new TaskRunner() ).start();
|
||||
}
|
||||
}
|
||||
|
||||
if( monitor == null || !monitor.isAlive() ) (monitor = monitorFactory.newThread( new Monitor() )).start();
|
||||
}
|
||||
}
|
||||
|
||||
@ -368,7 +369,16 @@ public final class ComputerThread
|
||||
{
|
||||
TaskRunner runner = currentRunners[i];
|
||||
// If we've no runner, skip.
|
||||
if( runner == null ) continue;
|
||||
if( runner == null || runner.owner == null || !runner.owner.isAlive() )
|
||||
{
|
||||
if( !running ) continue;
|
||||
|
||||
// Mark the old runner as dead and start a new one.
|
||||
ComputerCraft.log.warn( "Previous runner ({}) has crashed, restarting!",
|
||||
runner != null && runner.owner != null ? runner.owner.getName() : runner );
|
||||
if( runner != null ) runner.running = false;
|
||||
runnerFactory.newThread( runners[i] = new TaskRunner() ).start();
|
||||
}
|
||||
|
||||
// If the runner has no work, skip
|
||||
ComputerExecutor executor = runner.currentExecutor.get();
|
||||
@ -492,7 +502,7 @@ public final class ComputerThread
|
||||
{
|
||||
executor.work();
|
||||
}
|
||||
catch( Exception e )
|
||||
catch( Exception | LinkageError | VirtualMachineError e )
|
||||
{
|
||||
ComputerCraft.log.error( "Error running task on computer #" + executor.getComputer().getID(), e );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user