(toppers-users 2552) chk_flg_cond にバグ

takaya_kakizaki @ gmx.yamaha.com takaya_kakizaki @ gmx.yamaha.com
2006年 10月 30日 (月) 11:24:38 JST


柿崎と申します。

FI4のソースを見たのですが、

QUEUE *chk_flg_cond(FLGCB *flgcb, QUEUE *queue, BOOL *disp)
{
        TCB     *tcb;
        WINFO_FLG *winfo;
        QUEUE   *ret;

        tcb = (TCB *)queue;
        ret = queue;
        winfo = (WINFO_FLG *)(tcb->winfo);
        if (eventflag_cond(flgcb, winfo->waiptn,
                                winfo->wfmode, &(winfo->flgptn))) {
          //            queue_delete(&(tcb->task_queue));
                ret = queue->prev;
                queue_delete(queue);
                if (wait_complete(tcb,schedtsk)) {
                        *disp = TRUE;
                } else {
                        *disp = FALSE;
                }
        }
        return ret;
}

において、初めのifを通らない場合、dispが初期化されない気がします。
chk_flg_condを呼び出した側ではdispを自動変数で取っているので
呼び出された後どの値が入るかが不定になりますが、どうでしょう。
あらかじめdispをFALSEに初期化しておく必要はありませんか。

よろしくお願いします。

------------------------
柿崎 貴也
ヤマハ株式会社 サウンドネットワーク事業部
サウンドネット開発部
E-mail: kakizaki @ soundnet.yamaha.co.jp