Run user-supplied regexes in worker threads with a timeout
This commit is contained in:
parent
19b97bc32b
commit
a7fa258f2a
15 changed files with 237 additions and 43 deletions
37
backend/src/regExpRunners.ts
Normal file
37
backend/src/regExpRunners.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { RegExpRunner } from "./RegExpRunner";
|
||||
|
||||
interface RunnerInfo {
|
||||
users: number;
|
||||
runner: RegExpRunner;
|
||||
}
|
||||
|
||||
const runners: Map<string, RunnerInfo> = new Map();
|
||||
|
||||
export function getRegExpRunner(key: string) {
|
||||
if (!runners.has(key)) {
|
||||
const runner = new RegExpRunner();
|
||||
runners.set(key, {
|
||||
users: 0,
|
||||
runner,
|
||||
});
|
||||
}
|
||||
|
||||
const info = runners.get(key);
|
||||
info.users++;
|
||||
|
||||
return info.runner;
|
||||
}
|
||||
|
||||
export function discardRegExpRunner(key: string) {
|
||||
if (!runners.has(key)) {
|
||||
throw new Error(`No runners with key ${key}, cannot discard`);
|
||||
}
|
||||
|
||||
const info = runners.get(key);
|
||||
info.users--;
|
||||
|
||||
if (info.users <= 0) {
|
||||
info.runner.dispose();
|
||||
runners.delete(key);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue