メッセージをキューに追加する事によってポートへメッセージを送信する。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
syscall | ptsend (int32 portid, umsg32 msg) |
メッセージをキューに追加する事によってポートへメッセージを送信する。 More... | |
メッセージをキューに追加する事によってポートへメッセージを送信する。
Definition in file ptsend.c.
メッセージをキューに追加する事によってポートへメッセージを送信する。
Step1. 割り込みを禁止する。
Step2. ポートIDが不正、もしくはポートがALLOC状態でなければ割り込み状態を復元し、処理を終了する。
Step3. 送信側セマフォに空きが出るまで待機する。
セマフォ待機後、以下の状態のいずれかであれば割り込み状態を復元し、処理を終了する。
・セマフォ待機結果がエラー
・ポートがALLOC状態以外
・シーケンス番号が変化した場合
Step4. ポートフリーノードがNULL状態であれば(メッセージを使い果たした場合)、Panic状態とする。
Step5. ポートフリーノードからメッセージノード1個を切り出し、メッセージノードにメッセージを追加する。
Step6. メッセージノードをメッセージリストの末尾に追加する。
Step7. 受信セマフォにシグナルを送る。
Step8. 割り込み状態を復元する。
[in] | portid | 使用するポートのID |
[in] | msg | 送信するメッセージ |
Definition at line 31 of file ptsend.c.
References disable(), isbadport, NULL, OK, panic(), 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().