この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2014年3月)

2014年3月11日

Bug-org 981951 We should remove following char message immediately after we find it at handling keydown message
初回投稿日時: 2014年03月11日12時44分28秒
カテゴリ: Mozilla Core Mozilla28 Mozilla29 Mozilla30 Windows バグ修正
SNS: (list)

mozilla::widget::NativeKey::RemoveFollowingCharMessage()は、keypressイベントの生成処理の流れの中で、自然なタイミングで呼び出されてました。しかし、このメソッドがメッセージ処理の最中に、ありえない状況が発生しているということは、他のスレッド等からメッセージキューに変更が加えられている可能性があります。そこで、メッセージを発見してから削除するまでの魔の時間を可能な限り短くするため、mozilla::widget::NativeKeyGetFollowingCharMessage()というメソッドに改名し、メッセージの存在を確認した直後に、それをキューから削除し、戻り値として引数経由でその削除したメッセージを返し、必要としているメソッドへ引数として渡すように修正しました。

なお、PeekMessage()でメッセージを削除する際に、キーメッセージにその対象を限定していても、WM_NULLが削除されるという不思議な挙動がMetroFirefox上でのみ見られたので、PeekMessage()WM_NULLを削除した場合には最高で5回までリトライするようにしています(その後のクラッシュレポートのログを見た限りでは2回以上していることは無さそうですが)。

なお、この修正により、クラッシュのシグネチャが[@ mozilla::widget::NativeKey::GetFollowingCharMessage(tagMSG&)]に変更されていることに注意してください。

関連するかもしれないエントリ

bug-org 981951を含むエントリ