aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/user/process.c
blob: 7519dae0d8e733216eef6581cfe92dae987cba11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <mutex.h>
#include <process.h>

typedef struct process {
	thread_t *thread;
	int pid;

	mutex_t com_mutex;

	hashtbl_t *chans;
	chan_id_t next_chan_id;

	message_t mbox[PROCESS_MAILBOX_SIZE];
	int mbox_size;	// number of messages in queue
	int mbox_first;	// first message in queue (circular buffer)

	// a process can be in several waiting states :
	// - wait for any message
	// - wait for a message on a particular channel
	//   in this case, if a message is pushed on this particular channel,
	//	 then it is put in front of the queue, so that it is the next message read
	//	 (it is guaranteed that doing await_message_on_chan() immediately followed by get_message()
	//   gets the message whose size was returned by await_...)
	int wait_state;
	chan_id_t wait_chan_id;		// when waiting for a message on a particular channel
} process_t;

int push_message(process_t *proc, message_t msg);		// nonnull on error (process queue is full)

/* vim: set ts=4 sw=4 tw=0 noet :*/