XINU
Functions
ptdelete.c File Reference

ポートを削除し、待機中のプロセスとメッセージを解放する。 More...

#include <xinu.h>
Include dependency graph for ptdelete.c:

Go to the source code of this file.

Functions

syscall ptdelete (int32 portid, int32(*disp)(int32))
 ポートを削除し、待機中のプロセスとメッセージを解放する。 More...
 

Detailed Description

ポートを削除し、待機中のプロセスとメッセージを解放する。

Definition in file ptdelete.c.

Function Documentation

◆ ptdelete()

syscall ptdelete ( int32  portid,
int32(*)(int32 disp 
)

ポートを削除し、待機中のプロセスとメッセージを解放する。

Step1. 割り込みを禁止する。
Step2. ポートIDが不正、もしくはポートがALLOC状態でなければ割り込み状態を復元し、処理を終了する。
Step3. ポートを用いたメッセージと待機中プロセスを解放し、セマフォを削除する。
Step4. 次回のポート作成時には、今回削除したポートIDを使用するように設定する。
Step5. 割り込み状態を復元する。

Parameters
[in]portid削除対象のポート
[in]disp待機メッセージ処分用の関数ポインタ
Returns
成功時はOK、ポートIDが不正もしくはポートがALLOC状態以外の場合はSYSERRを返す。

Definition at line 19 of file ptdelete.c.

References _ptclear(), disable(), isbadport, OK, porttab, PT_ALLOC, PT_FREE, ptnextid, ptentry::ptstate, restore(), and SYSERR.

20 {
21  intmask mask; /* Saved interrupt mask */
22  struct ptentry *ptptr; /* Pointer to port table entry */
23 
24  mask = disable();
25  if (isbadport(portid) ||
26  (ptptr = &porttab[portid])->ptstate != PT_ALLOC)
27  {
28  restore(mask);
29  return SYSERR;
30  }
31  _ptclear(ptptr, PT_FREE, disp);
32  ptnextid = portid;
33  restore(mask);
34  return OK;
35 }
void _ptclear(struct ptentry *, uint16, int32(*)(int32))
ポートを用いたメッセージと待機中プロセスを解放する。
Definition: ptclear.c:24
void restore(intmask)
ポートテーブルエントリ
Definition: ports.h:33
#define isbadport(portid)
ポートIDが不正値かどうかを確認する。
Definition: ports.h:64
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define PT_ALLOC
ポートが割り当てられた
Definition: ports.h:15
#define OK
処理が成功した場合
Definition: kernel.h:77
struct ptentry porttab[]
ポートテーブルエントリのextern宣言
Definition: ptinit.c:10
uint16 ptstate
ポート状態(FREE/LIMBO/ALLOC)
Definition: ports.h:40
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
int32 ptnextid
空きスロットを探す際に試みる次のポートID
Definition: ptinit.c:12
#define PT_FREE
ポートがFREE状態
Definition: ports.h:11
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Here is the call graph for this function: