Install Docker for Windows and start a mysql:5.7 image. (See docker-run-mysql.sh for a sample command line.)
Run the tests (dotnet test tests\SideBySide\SideBySide.csproj). dotnet.exe crashes.
Analyzing the crash dump in WinDbg reveals that it's a stack overflow exception:
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00007ff894cf5323 (System_Net_Sockets!System.Net.Sockets.Socket.Receive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.Net.Sockets.SocketError ByRef)$##6000191+0x0000000000000033)
ExceptionCode: c00000fd (Stack overflow)
ExceptionFlags: 00000001
NumberParameters: 2
Parameter[0]: 0000000000000001
Parameter[1]: 00000039d5b43fb8
PROCESS_NAME: dotnet.exe
ERROR_CODE: (NTSTATUS) 0xc00000fd - A new guard page for the stack cannot be created.
EXCEPTION_CODE: (NTSTATUS) 0xc00000fd - A new guard page for the stack cannot be created.
The failing test case can be narrowed down to one test method: dotnet test tests\SideBySide\SideBySide.csproj --filter="FullyQualifiedName~InsertLargeBlobSync"
Perhaps something about running the docker image under Windows is throttling network packets so that only a few bytes arrive at a time, yet there's always some more data to read, so the continuations run synchronously?
The recursive continuations may need to be rewritten as a loop.
This was similar to #239 but occurred in InsertLargeBlobAsync when reading over a slow connection. The 'ContinueWith' code chained too many continuations together recursively. The compiler-generated 'await' state machine avoids this problem.
bgrainger commentedApr 13, 2017
Install Docker for Windows and start a
mysql:5.7
image. (See docker-run-mysql.sh for a sample command line.)Run the tests (
dotnet test tests\SideBySide\SideBySide.csproj
).dotnet.exe
crashes.Analyzing the crash dump in WinDbg reveals that it's a stack overflow exception:
The failing test case can be narrowed down to one test method:
dotnet test tests\SideBySide\SideBySide.csproj --filter="FullyQualifiedName~InsertLargeBlobSync"
Perhaps something about running the docker image under Windows is throttling network packets so that only a few bytes arrive at a time, yet there's always some more data to read, so the continuations run synchronously?
The recursive continuations may need to be rewritten as a loop.
Full crash call stack:
The text was updated successfully, but these errors were encountered: