Exemple #1
0
int neighbor_start_inactive_timer(struct ospfd *ospfd,
		struct interface_data *i, struct neighbor *neighbor)
{
	int ret;
	struct inactivity_timer_data *inactivity_timer_data;
	/* FIXME: hardcoded time-out */
	struct timespec timespec = { 10, 0 };
	struct ev_entry *ev_entry;

	msg(ospfd, DEBUG, "prepare inactive timer for neighbor");

	inactivity_timer_data = xzalloc(sizeof(struct inactivity_timer_data));
	inactivity_timer_data->ospfd    = ospfd;
	inactivity_timer_data->neighbor = neighbor;
	inactivity_timer_data->interface_data = i;

	neighbor->inactivity_timer_data = inactivity_timer_data;

	ev_entry = ev_timer_new(&timespec, neighbor_inactive_timer_expired,
			inactivity_timer_data);
	if (!ev_entry) {
		err_msg_die(EXIT_FAILURE, "Cannot initialize a new timer");
	}

	inactivity_timer_data->neighbor->inactive_timer_entry = ev_entry;

	ret = ev_add(ospfd->ev, ev_entry);
	if (ret != EV_SUCCESS) {
		err_msg_die(EXIT_FAILURE, "Cannot add new timer to global event handler");
	}

	return SUCCESS;
}
Exemple #2
0
int display_new(struct uterm_display **out, const struct display_ops *ops)
{
	struct uterm_display *disp;
	int ret;

	if (!out || !ops)
		return -EINVAL;

	disp = malloc(sizeof(*disp));
	if (!disp)
		return -ENOMEM;
	memset(disp, 0, sizeof(*disp));
	disp->ref = 1;
	disp->ops = ops;
	shl_dlist_init(&disp->modes);

	log_info("new display %p", disp);

	ret = shl_hook_new(&disp->hook);
	if (ret)
		goto err_free;

	disp->vblank_spec.it_value.tv_nsec = 15 * 1000 * 1000;

	ret = ev_timer_new(&disp->vblank_timer, NULL,
			   display_vblank_timer_event, disp, NULL, NULL);
	if (ret)
		goto err_hook;

	ret = VIDEO_CALL(disp->ops->init, 0, disp);
	if (ret)
		goto err_timer;

	*out = disp;
	return 0;

err_timer:
	ev_timer_unref(disp->vblank_timer);
err_hook:
	shl_hook_free(disp->hook);
err_free:
	free(disp);
	return ret;
}