Fix concurrent map write panic in timeout middleware
- Add thread-safe header wrapper in timeoutWriter - Check context cancellation before writing responses in handlers - Protect header access after timeout with mutex - Prevents race condition when requests timeout while handlers are still running
This commit is contained in:
@@ -557,6 +557,14 @@ func (s *Server) handleASDetail() http.HandlerFunc {
|
||||
IPv6Count: len(ipv6Prefixes),
|
||||
}
|
||||
|
||||
// Check if context is still valid before writing response
|
||||
select {
|
||||
case <-r.Context().Done():
|
||||
// Request was cancelled, don't write response
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
tmpl := templates.ASDetailTemplate()
|
||||
if err := tmpl.Execute(w, data); err != nil {
|
||||
@@ -694,6 +702,14 @@ func (s *Server) handlePrefixDetail() http.HandlerFunc {
|
||||
OriginCount: len(originMap),
|
||||
}
|
||||
|
||||
// Check if context is still valid before writing response
|
||||
select {
|
||||
case <-r.Context().Done():
|
||||
// Request was cancelled, don't write response
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
tmpl := templates.PrefixDetailTemplate()
|
||||
if err := tmpl.Execute(w, data); err != nil {
|
||||
@@ -814,6 +830,14 @@ func (s *Server) handlePrefixLength() http.HandlerFunc {
|
||||
"Count": len(prefixes),
|
||||
}
|
||||
|
||||
// Check if context is still valid before writing response
|
||||
select {
|
||||
case <-r.Context().Done():
|
||||
// Request was cancelled, don't write response
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
tmpl := template.Must(template.ParseFiles("internal/templates/prefix_length.html"))
|
||||
if err := tmpl.Execute(w, data); err != nil {
|
||||
s.logger.Error("Failed to render prefix length template", "error", err)
|
||||
|
||||
Reference in New Issue
Block a user