YungTatyu / webserv

HTTP/1.1 server written in cpp.
1 stars 0 forks source link

stress test-crash原因調査 #219

Closed YungTatyu closed 4 months ago

YungTatyu commented 5 months ago

対応内容

ayase-mstk commented 5 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しないとだめなようだ。

ayase-mstk commented 5 months ago

mac環境でも208ブランチでテスト終了後にdouble-free発生