포럼: Developers (Thread #22946)

HOS-V4a snd_mbx() 優先順位指定のバグ (2009-06-02 07:10 by qwww #44134)

こんにちは。いつも、HOS-V4a の開発ありがとうございます。


HOS-V4a で 後回し作業になっていそうな、MBX (メールボックス) ですが、
使ってみたら、動きました。
と、喜んでいたものの、1箇所 バグを見つけてしまいましたので、報告させていただきます。


MBX (メールボックス) で、優先順位 msgpri = 1 にして snd_mbx() で送信したメッセージは、rcv_mbx() で受信できません。
他の優先順位 (たとえば msgpri = 2) だと受信できます。



原因は、
ソースコードの kadp_msg.c と krmp_msg.c で整合性がとれていないだけのようです。

kadp_msg.c 30行目付近
> _kernel_add_msq(&(*pppk_msgque)[mpri - TMIN_MPRI], pk_msg);
ここで TMIN_MPRI を 引いてしまっているのが問題なのか?

krmp_msg.c 26行目付近
> for ( mpri = TMIN_MPRI; mpri < maxmpri; mpri++ )
> {
> if ( (*pppk_msgque)[mpri] != NULL )
> {
> return _kernel_rmv_msq(&(*pppk_msgque)[mpri]);
> }
> }
for 文で TMIN_MPRI から探しはじめているのがいけないのか



RE: HOS-V4a snd_mbx() 優先順位指定のバグ (2009-06-02 19:19 by ryuz #44150)

お世話になります。Ryuzです。
バグレポ有難うございます。

for 文で TMIN_MPRI から探しはじめているのが原因ですね。
メモリ効率の点からずらして格納しています。

動作確認できていないのですが、一応修正してコミットしておきました。

よろしくお願いします。
Reply to #44134

RE: HOS-V4a snd_mbx() 優先順位指定のバグ (2009-08-09 06:19 by qwww #45359)

お世話になります。
大変に、大変に返信が遅くなりすみません。
やっと時間がとれ、snd_mbx() を動かしてみました。問題なく動きました。大丈夫です。
有難うございます。



少々ずれますが、
snd_dtq()あたりのソースを見ていましたら、データキューですが、バグっていますね。(まだ開発中だとは思われますが)

snd_dtq() でデータ送信してバッファがフルになって タスクが 待ち行列 に入るときに、
snd_dtq() の内部で、
_KERNEL_TSK_SET_DATA(tcb, data);
を用いて、でデータを格納してしまいますが、rcv_dtq() が起き上がるタイミングによっては、
データキューの順番が狂ってしまうと思われます。
snd_mbx() の確認のため 比較に snd_dtq() のソースコードを見て気が付きました。

Reply to #44150

RE: HOS-V4a snd_mbx() 優先順位指定のバグ (2009-08-16 09:37 by ryuz #45422)

お世話になります。Ryuzです。

> 少々ずれますが、
> snd_dtq()あたりのソースを見ていましたら、データキューですが、バグっていますね。(まだ開発中だとは思われますが)

確認いたしました。確かにバグっていますね。
セマフォあたりのコードを雛形にして、サイズ0対応含めて保留した
まま忘れていました。

対応したいと思います。御指摘有難うございました。
Reply to #45359