diff options
author | Sebastian <sebasjm@gmail.com> | 2022-04-28 13:26:29 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-04-28 13:26:29 -0300 |
commit | b239ae1029eef5a68bf98d21e81acd317abb0673 (patch) | |
tree | f0e7657a35e92a7a4f75222ff6aa247e578e9af2 /packages/taler-wallet-core/src/wallet.ts | |
parent | 451c9884dcd20e7e886ed32e5ef93913d29e36ff (diff) | |
download | wallet-core-b239ae1029eef5a68bf98d21e81acd317abb0673.tar.xz |
keep alive manifest v3
Diffstat (limited to 'packages/taler-wallet-core/src/wallet.ts')
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index 96722aefb..579710d4e 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -327,6 +327,27 @@ export interface RetryLoopOpts { } /** + * This iteration hint will keep incrementing while the taskLoop iteration. + * If the hint does not match the current iteration it means that another + * promises is also working or has done some work before. + */ +let iterationHint = 0 +function thereIsAnotherPromiseWorking(iteration: number): boolean { + if (iterationHint > iteration) { + logger.trace(`some other promise is or has done some progress`); + iterationHint = iteration; + //we know that another promise did some work but don't know if still active + //so we take ownership and do work + } else if (iterationHint < iteration) { + //another promise take ownership that means that our time has come to an end + return true + } + // increment the hint to match the next loop + iterationHint++ + return false +} + +/** * Main retry loop of the wallet. * * Looks up pending operations from the wallet, runs them, repeat. @@ -336,6 +357,10 @@ async function runTaskLoop( opts: RetryLoopOpts = {}, ): Promise<void> { for (let iteration = 0; !ws.stopped; iteration++) { + if (thereIsAnotherPromiseWorking(iteration)) { + logger.trace(`another promise is working, we just need one`); + return; + } const pending = await getPendingOperations(ws); logger.trace(`pending operations: ${j2s(pending)}`); let numGivingLiveness = 0; |