Bug #66

Redmine Adminほぼ11年前に更新

h1. 状況(2012.12.18)

V6.29にて対応済み。

(原因)
本機構の初期実装時点から内在していたバグ。

音部記号の上部に表示する属性値<xxx>の値を算出するタイミングは、五線音符が再描画される時点を採用していた。
そしてその算出値を「値」として記憶し、再描画メッセージを発行していた。
かたや再描画モジュールは、イベントを受けた段階でその算出値から属性値<xxx>の「表示文字列」へ変換整形しそれを描画する。
しかしこのシーケンスでは、「値」から「表示文字列」に整形する段階で譜面モニタの状況が変化していた場合には、
以前の状況のデータと最新状況のデータを混在利用して変換処理を実施することになり矛盾が生じてしまう。
この変換処理は、 「グルーブ(p,q)」「ピッチ(U)」「ペダル(Y)」の場合に実施するため、症状を再現させる概要報告とも一致している。

一方、属性選択ポップアップメニューにて任意の属性を選んだ時点で、そのポップアップメニューが消えるため
その下部に位置する音部記号エリアや五線音符エリアの再描画が必要になる。
もし、五線音符エリアの再描画メッセージが音部エリアの再描画メッセージよりも先に発行された場合は
属性値の算出後に属性値<xxx>の表示が実施されるため矛盾は無いが、
これらのメッセージ順番が逆になった場合、矛盾が生じる可能性がある。
特に、自動譜めくりによって属性値<xxx>を変更すべき状態となっている場合で、
かつ現在表示されている属性とは異なる属性に切替えた場合には、
この矛盾によりNULL参照という事態に陥る可能性が高まる。

音部記号エリアと五線音符エリアの再描画メッセージの発行順序は、その時点のOS処理の状況によるため、
その順序がどうであれ、アプリケーションは正しく動くように設計すべきであるにもかかわらず、
特定の順序を前提とする実装となっていた。

(対処)
属性値<xxx>の値を算出したタイミングで、変換整形を完結させ表示文字列としてそれを記憶しておき、
どのようなタイミングで再描画メッセージが起こっても、その表示文字列で描画するよう改めた。

h1. 概要(2012.12.16)


<pre>
himajin925さん
投稿日:2012/12/16(Sun) 22:11:57

譜面モニタの左上 <>で右クリック、各種設定値を表示しようとする場合
テンポ<->ボリューム<->ピッチ …などと何回《も》繰り返して選びなおしていると、
「問題が発生したため、MUSE.EXE を終了します。…」のダイアログが出で、異常終了します。
今回も発生条件がよく分かりません。
Ver6.27 です。WinXP SP3
落ちたアドレスは Offset:0002650c または 000265e4
以前のバージョンでも発生していたかも知れません(落ちた覚えがあります)。
またアドレスは2つだけ書きましたが、直前に右クリックのメニューから選んだ表示項目によって違っているのか、
他のアドレスで落ちることもあるのかもしれません。
※今のところ「大地の歌」でしか発生していません←他の曲でも出ました
</pre>
<pre>
Elekenさん
投稿日:2012/12/17(Mon) 21:52:07

私も、前からたまに落ちる現象があったので、極力譜面モニタ属性は触らないようにしていました。
こちらの環境の問題かと思っていたのですが、他の方の環境でも再現する現象ということで、少しびっくりです。
こちらで少し調べたところ、以下の順番の操作で 100% 再現します。
(1) 譜面モニタを開き、自動譜めくりをオンにして、適当な譜面モニタ属性を表示する
(2) 再生中に、<> 部分を右クリックして、メニューを表示する
(3) 自動譜めくりが行われる
(4) 「グルーブ(p,q)」「ピッチ(U)」「ペダル(Y)」のいずれかをクリックする
</pre>

戻る