(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