summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/shepherd.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/shepherd.ts')
-rw-r--r--packages/taler-wallet-core/src/shepherd.ts23
1 files changed, 21 insertions, 2 deletions
diff --git a/packages/taler-wallet-core/src/shepherd.ts b/packages/taler-wallet-core/src/shepherd.ts
index bf2f6b50f..ec0f6a76e 100644
--- a/packages/taler-wallet-core/src/shepherd.ts
+++ b/packages/taler-wallet-core/src/shepherd.ts
@@ -141,6 +141,8 @@ export class TaskScheduler {
private throttler = new TaskThrottler();
+ isRunning: boolean = false;
+
constructor(private ws: InternalWalletState) {}
async loadTasksFromDb(): Promise<void> {
@@ -153,9 +155,26 @@ export class TaskScheduler {
}
}
+ ensureRunning(): void {
+ if (this.isRunning) {
+ return;
+ }
+ this.run()
+ .catch((e) => {
+ logger.error("error running task loop");
+ logger.error(`err: ${e}`);
+ })
+ .then(() => {
+ logger.info("done running task loop");
+ });
+ }
+
async run(opts: RetryLoopOpts = {}): Promise<void> {
+ if (this.isRunning) {
+ throw Error("task loop already running");
+ }
logger.info("Running task loop.");
- this.ws.isTaskLoopRunning = true;
+ this.isRunning = true;
await this.loadTasksFromDb();
logger.info("loaded!");
logger.info(`sheps: ${this.sheps.size}`);
@@ -182,7 +201,7 @@ export class TaskScheduler {
}
await this.iterCond.wait();
}
- this.ws.isTaskLoopRunning = false;
+ this.isRunning = false;
logger.info("Done with task loop.");
}