mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-28 16:58:01 +01:00
Merge pull request #1692 from tznind/fix-timeout-add-key-conflict
Fixed RunTimers not checking for key collisions in list when adding to timeouts
This commit is contained in:
@@ -120,10 +120,7 @@ namespace Terminal.Gui {
|
||||
{
|
||||
lock (timeoutsLockToken) {
|
||||
var k = (DateTime.UtcNow + time).Ticks;
|
||||
while (timeouts.ContainsKey (k)) {
|
||||
k = (DateTime.UtcNow + time).Ticks;
|
||||
}
|
||||
timeouts.Add (k, timeout);
|
||||
timeouts.Add (NudgeToUniqueKey(k), timeout);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,13 +188,30 @@ namespace Terminal.Gui {
|
||||
AddTimeout (timeout.Span, timeout);
|
||||
} else {
|
||||
lock (timeoutsLockToken) {
|
||||
timeouts.Add (k, timeout);
|
||||
timeouts.Add (NudgeToUniqueKey(k), timeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds the closest number to <paramref name="k"/> that is not
|
||||
/// present in <see cref="timeouts"/> (incrementally).
|
||||
/// </summary>
|
||||
/// <param name="k"></param>
|
||||
/// <returns></returns>
|
||||
private long NudgeToUniqueKey (long k)
|
||||
{
|
||||
lock(timeoutsLockToken) {
|
||||
while (timeouts.ContainsKey (k)) {
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
return k;
|
||||
}
|
||||
|
||||
void RunIdle ()
|
||||
{
|
||||
List<Func<bool>> iterate;
|
||||
|
||||
Reference in New Issue
Block a user