예제 #1
0
static void *ui_shadow_eventcb(int event, void *data)
{
	struct ui_resource_holder *rh;

	switch (event) {

	case XNSHADOW_CLIENT_ATTACH:

		rh = xnarch_alloc_host_mem(sizeof(*rh));
		if (!rh)
			return ERR_PTR(-ENOMEM);

		initq(&rh->semq);
		initq(&rh->flgq);
		initq(&rh->mbxq);

		return &rh->ppd;

	case XNSHADOW_CLIENT_DETACH:

		rh = ppd2rholder((xnshadow_ppd_t *) data);
		ui_sem_flush_rq(&rh->semq);
		ui_flag_flush_rq(&rh->flgq);
		ui_mbx_flush_rq(&rh->mbxq);

		xnarch_free_host_mem(rh, sizeof(*rh));

		return NULL;
	}

	return ERR_PTR(-EINVAL);
}
예제 #2
0
void uimbx_cleanup(void)
{
	ui_mbx_flush_rq(&__ui_global_rholder.mbxq);
	xnmap_delete(ui_mbx_idmap);
}