Merge pull request #3764 from danielyxie/dev

Remove the infinite loop safety net completely
This commit is contained in:
hydroflame 2022-05-25 18:40:57 -04:00 committed by GitHub
commit 535812a0fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 7 additions and 40 deletions

4
dist/main.bundle.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -54,8 +54,8 @@ export const CurrentOptionsPage = (props: IProps): React.ReactElement => {
}
function handleLocaleChange(event: SelectChangeEvent<string>): void {
setLocale(event.target.value );
Settings.Locale = event.target.value ;
setLocale(event.target.value);
Settings.Locale = event.target.value;
}
function handleTimestampFormatChange(event: React.ChangeEvent<HTMLInputElement>): void {
@ -179,12 +179,6 @@ export const CurrentOptionsPage = (props: IProps): React.ReactElement => {
</>
}
/>
<OptionSwitch
checked={Settings.InfinityLoopSafety}
onChange={(newValue) => (Settings.InfinityLoopSafety = newValue)}
text="Script infinite loop safety net"
tooltip={<>If this is set the game will attempt to automatically kill scripts stuck in infinite loops.</>}
/>
</GameOptionsPage>
),
[GameOptionsTab.INTERFACE]: (

@ -99,21 +99,8 @@ function wrapFunction(
getValidPort: (port: any) => helpers.getValidPort(functionPath, port),
},
};
const safetyEnabled = Settings.InfinityLoopSafety;
function wrappedFunction(...args: unknown[]): unknown {
helpers.updateDynamicRam(ctx.function, getRamCost(Player, ...tree, ctx.function));
if (safetyEnabled) {
const now = performance.now();
if (
now - workerScript.infiniteLoopSafety > CONSTANTS.InfiniteLoopLimit &&
workerScript.scriptRef.filename.endsWith(".js")
) {
throw new Error(
`Potential infinite loop without sleep detected. The game spent ${CONSTANTS.InfiniteLoopLimit}ms stuck in this script. (Are you using 'asleep' by mistake?)`,
);
}
}
return func(ctx)(...args);
}
const parent = getNestedProperty(wrappedAPI, ...tree);

@ -112,11 +112,6 @@ export class WorkerScript {
*/
atExit: any;
/**
* Once this counter reaches it's limit the script crashes. It is reset when a promise completes.
*/
infiniteLoopSafety = performance.now();
constructor(runningScriptObj: RunningScript, pid: number, nsFuncsGenerator?: (ws: WorkerScript) => NS) {
this.name = runningScriptObj.filename;
this.hostname = runningScriptObj.server;

@ -14,8 +14,6 @@ export function netscriptDelay(time: number, workerScript: WorkerScript): Promis
workerScript.delay = window.setTimeout(() => {
workerScript.delay = null;
workerScript.delayReject = undefined;
workerScript.infiniteLoopSafety = performance.now();
if (workerScript.env.stopFlag) reject(new ScriptDeath(workerScript));
else resolve();
}, time);

@ -54,11 +54,6 @@ interface IDefaultSettings {
*/
EnableBashHotkeys: boolean;
/**
* Infinite loop safety net
*/
InfinityLoopSafety: boolean;
/**
* Timestamps format
*/
@ -206,7 +201,6 @@ export const defaultSettings: IDefaultSettings = {
DisableOverviewProgressBars: false,
EnableBashHotkeys: false,
TimestampsFormat: "",
InfinityLoopSafety: true,
Locale: "en",
MaxRecentScriptsCapacity: 50,
MaxLogCapacity: 50,
@ -247,7 +241,6 @@ export const Settings: ISettings & ISelfInitializer & ISelfLoading = {
DisableOverviewProgressBars: defaultSettings.DisableOverviewProgressBars,
EnableBashHotkeys: defaultSettings.EnableBashHotkeys,
TimestampsFormat: defaultSettings.TimestampsFormat,
InfinityLoopSafety: defaultSettings.InfinityLoopSafety,
Locale: "en",
MaxRecentScriptsCapacity: defaultSettings.MaxRecentScriptsCapacity,
MaxLogCapacity: defaultSettings.MaxLogCapacity,