SSL clear_socketエラー対処
patchは#29143を当てた後のコードとの差分
デバッグ用にエラーメッセージをinfoからerrorにしていた箇所がそのまま残っていた。
tcp_session.cpp L908にて、メッセージ処理をすべきところをnext_call_functionを呼んでいた。 メッセージを実行するように処理を変更する。
メッセージ実行ループの最初にtimed_waitを入れているので、すでにmsgに値が入っていても無駄にwaitするようになっていたのを改善
close処理メッセージのところでは、close処理以外のメッセージを処理することを想定していない。したがって、message_queueに溜まっているclose以外の処理は、直前にすべて廃棄する必要がある。その処理を追加。
v3.0.4-2にここまでの修正が取り込まれたので、完了とする。
クライアント数12000のTPCWによるhttps通信負荷を30分かける試験をすると、 50回に1回の割合でcoreを吐く。
対処として、sslのときsocket.clear_socket()をio_serviceの workerスレッドに登録して処理するようにし、それによって clear_socket()の処理をシリアライズ化する。