XINU
ptdelete.c
Go to the documentation of this file.
1 
5 #include <xinu.h>
6 
19 syscall ptdelete(int32 portid, int32 (*disp)(int32))
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
syscall ptdelete(int32 portid, int32(*disp)(int32))
ポートを削除し、待機中のプロセスとメッセージを解放する。
Definition: ptdelete.c:19
struct ptentry porttab[]
ポートテーブルエントリのextern宣言
Definition: ptinit.c:10
uint16 ptstate
ポート状態(FREE/LIMBO/ALLOC)
Definition: ports.h:40
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
int32 ptnextid
空きスロットを探す際に試みる次のポートID
Definition: ptinit.c:12
#define PT_FREE
ポートがFREE状態
Definition: ports.h:11
int32 syscall
システムコール関数 返り値の型
Definition: kernel.h:47
intmask disable(void)
割り込み禁止(intr.Sに定義がある)