예제 #1
0
파일: socket.c 프로젝트: dpw/molerat
static void simple_socket_init(struct simple_socket *s,
			       struct socket_ops *ops, int fd)
{
	s->base.ops = ops;
	mutex_init(&s->mutex);
	wait_list_init(&s->reading, 0);
	wait_list_init(&s->writing, 0);

	s->fd = fd;
	if (fd >= 0)
		s->watched_fd
			= watched_fd_create(fd, simple_socket_handle_events, s);
}
예제 #2
0
파일: socket.c 프로젝트: dpw/molerat
static struct client_socket *client_socket_create(
					      struct addrinfo *addrinfos,
					      void (*fai)(struct addrinfo *))
{
	struct connector *c = xalloc(sizeof *c);
	struct client_socket *s = xalloc(sizeof *s);

	c->socket = s;

	tasklet_init(&c->tasklet, &s->base.mutex, c);
	wait_list_init(&c->connecting, 0);
	c->fd = -1;
	c->connected = 0;
	c->next_addrinfo = c->addrinfos = addrinfos;
	c->fai = fai;
	error_init(&c->err);

	simple_socket_init(&s->base, &client_socket_ops, -1);
	s->connector = c;

	/* Start connecting */
	mutex_lock(&s->base.mutex);
	start_connecting(c);
	tasklet_later(&c->tasklet, finish_connecting);
	mutex_unlock(&s->base.mutex);

	return s;
}
예제 #3
0
파일: scheduler.c 프로젝트: KrzysiekJ/ling
void scheduler_init(void)
{
	next_proc_id = 0;

	registry = hash_make();
	named_processes = hash_make();
	proc_queue_init(&queues.high_prio);
	proc_queue_init(&queues.normal_prio);
	proc_queue_init(&queues.low_prio);

	wait_list_init(&queues.on_timed_receive);
	proc_list_init(&queues.on_infinite_receive);

	//runtime = 0;
	scheduler_runtime_start();

	last_event_fired_ns = monotonic_clock();
	avg_event_gap_ns = MANUAL_POLLING_THRESHOLD;
	expect_event_in_ns = MANUAL_POLLING_THRESHOLD;

	memset(purgatory, 0, sizeof(purgatory));
	num_purged = 0;
}
예제 #4
0
파일: socket.c 프로젝트: dpw/molerat
static struct simple_server_socket *simple_server_socket_create(int *fds,
								int n_fds)
{
	int i;

	struct simple_server_socket *s = xalloc(sizeof *s);
	s->base.ops = &simple_server_socket_ops;
	mutex_init(&s->mutex);
	wait_list_init(&s->accepting, 0);
	s->n_fds = n_fds;

	s->fds = xalloc(n_fds * sizeof *s->fds);
	for (i = 0; i < n_fds; i++) {
		struct server_fd *sfd = &s->fds[i];
		sfd->socket = s;
		sfd->fd = fds[i];
		sfd->ready = FALSE;
		sfd->watched_fd
			= watched_fd_create(fds[i], accept_handle_events, sfd);
	}

	return s;
}