Github user scw00 commented on the issue: https://github.com/apache/trafficserver/issues/1531 There are reasons for this creash: 1ãATS try to connect the origin server, but receive RST package. So ATS try again until retry_times == 0. It will clean the server_entry (mark the VC as closed, remove this VC from write_ready_list and read_ready_list, then close it) in every times except the last one(It is easy to re-product), so it will call both read sm and write sm in the last times, and the write sm causes crash. 2ãEpoll trigger EPOLLERR without EVENTIO_READ(hard to re-product). In my opinion, the EPOLLERR always with read.enabled or write.enabled(otherwise, there is no sm could handle this event, we just ignore). So when EPOLLERR happens, we could push the vc into read_ready_list if the read.enabled == 1, otherwise push it into write_ready_list. By the way, there is my program to re-product this crash: ``` package main import ( "net" "os" "fmt" ) func main() { ls, err := net.Listen("tcp", os.Args[1]) if err != nil { fmt.Println(err) os.Exit(1) } for { conn, err := ls.Accept() if err != nil { fmt.Println(err) os.Exit(1) } go handleConnection(conn) } } func handleConnection(con net.Conn) { con.Close() } ```
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---