XINU
Functions
recvtime.c File Reference
#include <xinu.h>
Include dependency graph for recvtime.c:

Go to the source code of this file.

Functions

umsg32 recvtime (int32 maxwait)
 

Function Documentation

◆ recvtime()

umsg32 recvtime ( int32  maxwait)
Parameters
[in]maxwait
Returns

Definition at line 17 of file recvtime.c.

References currpid, disable(), FALSE, insertd(), PR_RECTIM, procent::prhasmsg, procent::prmsg, proctab, procent::prstate, resched(), restore(), sleepq, SYSERR, and TIMEOUT.

Referenced by arp_resolve(), icmp_recv(), udp_recv(), and udp_recvaddr().

20 {
21  intmask mask; /* Saved interrupt mask */
22  struct procent *prptr; /* Tbl entry of current process */
23  umsg32 msg; /* Message to return */
24 
25  if (maxwait < 0)
26  {
27  return SYSERR;
28  }
29  mask = disable();
30 
31  /* Schedule wakeup and place process in timed-receive state */
32 
33  prptr = &proctab[currpid];
34  if (prptr->prhasmsg == FALSE)
35  { /* Delay if no message waiting */
36  if (insertd(currpid, sleepq, maxwait) == SYSERR)
37  {
38  restore(mask);
39  return SYSERR;
40  }
41  prptr->prstate = PR_RECTIM;
42  resched();
43  }
44 
45  /* Either message arrived or timer expired */
46 
47  if (prptr->prhasmsg)
48  {
49  msg = prptr->prmsg; /* Retrieve message */
50  prptr->prhasmsg = FALSE; /* Reset message indicator */
51  }
52  else
53  {
54  msg = TIMEOUT;
55  }
56  restore(mask);
57  return msg;
58 }
pid32 currpid
現在実行中のプロセス。
Definition: initialize.c:32
#define PR_RECTIM
プロセスが「タイムアウト」か「メッセージの到着」のいずれか早い方で待機中の状態。
Definition: process.h:49
void restore(intmask)
qid16 sleepq
スリープ中のプロセスキュー
Definition: clkinit.c:7
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define TIMEOUT
システムコールがタイムアウトした場合
Definition: kernel.h:83
uint32 umsg32
プロセス間で渡されるメッセージ
Definition: kernel.h:32
status insertd(pid32, qid16, int32)
Definition: insertd.c:9
#define FALSE
Boolean False(0)
Definition: kernel.h:63
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
uint16 prstate
プロセス状態(PR_CURR, ..., etc)。
Definition: process.h:88
void resched(void)
最優先の適切なプロセスにCPU実行権を渡す。
Definition: resched.c:22
struct procent proctab[]
プロセステーブル。
Definition: initialize.c:23
プロセステーブル(32bitsの倍数)。
Definition: process.h:85
bool8 prhasmsg
有効(Valid)メッセージの場合、非0となる。
Definition: process.h:106
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
umsg32 prmsg
このプロセスに送信されたメッセージ。
Definition: process.h:104
Here is the call graph for this function:
Here is the caller graph for this function: