{"record":{"id":"c7128fc309434b37","repo":"golang/go","slug":"read-after-close","errorCode":null,"errorMessage":"Read after Close","messagePattern":"Read after Close","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/archive/zip/register.go","lineNumber":87,"sourceCode":"\tfr, ok := flateReaderPool.Get().(io.ReadCloser)\n\tif ok {\n\t\tfr.(flate.Resetter).Reset(r, nil)\n\t} else {\n\t\tfr = flate.NewReader(r)\n\t}\n\treturn &pooledFlateReader{fr: fr}\n}\n\ntype pooledFlateReader struct {\n\tmu sync.Mutex // guards Close and Read\n\tfr io.ReadCloser\n}\n\nfunc (r *pooledFlateReader) Read(p []byte) (n int, err error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.fr == nil {\n\t\treturn 0, errors.New(\"Read after Close\")\n\t}\n\treturn r.fr.Read(p)\n}\n\nfunc (r *pooledFlateReader) Close() error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tvar err error\n\tif r.fr != nil {\n\t\terr = r.fr.Close()\n\t\tflateReaderPool.Put(r.fr)\n\t\tr.fr = nil\n\t}\n\treturn err\n}\n\nvar (\n\tcompressors   sync.Map // map[uint16]Compressor","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/archive/zip/register.go#L69-L105","documentation":"Error \"Read after Close\" thrown in golang/go.","triggerScenarios":"Thrown at src/archive/zip/register.go:87 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}