XINU
|
ポートからメッセージを受信する。受信前にメッセージが空の場合はブロッキングする。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
uint32 | ptrecv (int32 portid) |
ポートからメッセージを受信する。受信前にメッセージが空の場合はブロッキングする。 More... | |
ポートからメッセージを受信する。受信前にメッセージが空の場合はブロッキングする。
Definition in file ptrecv.c.
ポートからメッセージを受信する。受信前にメッセージが空の場合はブロッキングする。
Step1. 割り込みを禁止する。
Step2. ポートIDが不正、もしくはポートがALLOC状態でなければ割り込み状態を復元し、処理を終了する。
Step3. 送信側セマフォに空きが出るまで待機する。
セマフォ待機後、以下の状態のいずれかであれば割り込み状態を復元し、処理を終了する。
・セマフォ待機結果がエラー
・ポートがALLOC状態以外
・シーケンス番号が変化した場合
Step4. ポートフリーノードがNULL状態であれば(メッセージを使い果たした場合)、Panic状態とする。
Step5. ポートフリーノードからメッセージノード1個を切り出し、メッセージノードにメッセージを追加する。
Step6. メッセージノードをメッセージリストの末尾に追加する。
Step7. 受信セマフォにシグナルを送る。
Step8. 割り込み状態を復元する。
[in] | portid | 使用するポートのID |
Definition at line 29 of file ptrecv.c.
References disable(), isbadport, NULL, porttab, PT_ALLOC, ptfree, ptentry::pthead, ptnode::ptmsg, ptnode::ptnext, ptentry::ptrsem, ptentry::ptseq, ptentry::ptssem, ptentry::ptstate, ptentry::pttail, restore(), signal(), SYSERR, and wait().