Go 1.12.10 on top and bottom. Go 1.13.3 in the middle.
It is completely different functions that were pre-empted (flate.(*fastGen).matchlenLong) vs. flate.(*decompressor).Read - completely different code. All crashes were in mgcmark.go:711. Final crash was while executing bytes.(*Buffer).grow.
As Keith Randall noted on the original issue #20846
This looks like the stack has been trashed somehow.
Not only the return address for gopark. gopark's arguments also look trashed. The gcBgMarkWorker failure looks similar, hard to tell for sure if its args are trashed as it has only one arg.
Not sure what might cause this. Could be misuse of unsafe, could be runtime bug (use after free of stack memory?).