You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
At first I suspected that there is a deadlock. But I don't know why because I find no reason in my code. Then I added some logs. Then I find out after sometime, the lock is not released even after leaving the using block.
This is the only one method that uses the lock:
public async Task<T> GetAsync(TimeSpan ttl)
{
var lockid = Interlocked.Increment(ref lockID);
Common.Log.Verbose($"GetAsync entering lock {GetHashCode()}.{lockid} {new StackTrace(1, true)}");
if ((bool)_lock.GetPrivateFieldOrProperty("_taken"))
{
Common.Log.Warning("[ValueCache2] GetAsync: will wait for lock");
Common.Log.Verbose($"GetAsync leaving lock {lockid}");
return await DoGet(ttl);
}
using (await _lock.LockAsync())
{
Common.Log.Verbose($"GetAsync leaving lock {lockid}");
return await DoGet(ttl);
}
}
This is the log:
2020-08-21 14:10:16.316 [VERB] GetAsync entering lock 33189039.4560 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at co.b(TimeSpan A_0)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2) in C:\code\quant\Iwala\Api\Api.cs:line 98
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2)
...
2020-08-21 14:10:16.316 [VERB] GetAsync leaving lock 4560
...
2020-08-21 14:10:19.343 [VERB] GetAsync entering lock 33189039.4561 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at co.b(TimeSpan A_0)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2) in C:\code\quant\Iwala\Api\Api.cs:line 98
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2)
at cu.j(UInt32 A_0) in C:\code\quant\Iwala\Api\Api.cs:line 132
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at cu.j(UInt32 A_0)
...
2020-08-21 14:10:19.343 [WARN] [ValueCache2] GetAsync: will wait for lock
2020-08-21 14:10:19.343 [VERB] GetAsync leaving lock 4561
...
2020-08-21 14:10:21.364 [VERB] GetAsync entering lock 33189039.4562 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at co.b(TimeSpan A_0)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2) in C:\code\quant\Iwala\Api\Api.cs:line 98
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at cu.j[a](Func`1 A_0, UInt32 A_1, Object[] A_2)
...
2020-08-21 14:10:21.364 [WARN] [ValueCache2] GetAsync: will wait for lock
2020-08-21 14:10:21.364 [VERB] GetAsync leaving lock 4562
After that, the lock is not never released. The log always prints will wait for lock.
The text was updated successfully, but these errors were encountered:
At first I suspected that there is a deadlock. But I don't know why because I find no reason in my code. Then I added some logs. Then I find out after sometime, the lock is not released even after leaving the using block.
This is the only one method that uses the lock:
This is the log:
After that, the lock is not never released. The log always prints
will wait for lock
.The text was updated successfully, but these errors were encountered: