# goroutine leak: N goroutines blocked in chan send (detected via pprof)

- **ID:** `go/goroutine-leak-blocked-send`
- **Domain:** go
- **Category:** resource_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

Goroutines were spawned to send on an unbuffered or full channel whose receiver stopped reading, so they block forever and accumulate.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.0+ | active | — | — |

## Workarounds

1. **** (95% success)
   ```
   select {
case ch <- v:
case <-ctx.Done():
    return
}
   ```
2. **** (90% success)
   ```
   jobs := make(chan Job, 128)
for i := 0; i < runtime.NumCPU(); i++ {
    go func() { for j := range jobs { process(j) } }()
}
   ```

## Dead Ends

- **** — Blocked goroutines are not CPU-bound; more CPUs do not unblock them and memory keeps growing. (95% fail)
- **** — GC does not collect goroutines blocked on channels; they remain reachable from the scheduler. (90% fail)
