Closed YungTatyu closed 4 months ago
epollでcrash確認。
crash時、~WebServer()で呼ばれるConnectionManager::clearAllConnections()において、cgi fdとclient fdのときで両方ともdelete ConnectionDataしてしまっている。 かといって、この場面でisCgiSocket()を使うとそれもheap-use-after-freeになってしまう。 -> 解決
callEventHandler->getCgiHandler->connections_.at()でout of rangeがthrowされている。 -> ここでは必ず値はあるはずなのだが、、
handleCgiReadEventの最後でcloseConnectionしたfdでまたイベントが発生して、callEventHandler内でまたgetCgiHandlerを呼ぶ時にセグフォしているようだ。
handleCgiReadEventの最後でcloseConnectionしただけではだめなようで、ちゃんとEpollServer側でdeleteEventした後にcloseConnectionしないとだめなようだ。
mac環境でも208ブランチでテスト終了後にdouble-free発生
対応内容