void thread_release(struct proc_tcb *thread) { assert(thread); assert(thread->vspaceRef); cspacepath_t path; vka_cspace_make_path(&procServ.vka, thread_tcb_obj(thread), &path); vka_cnode_revoke(&path); sel4utils_clean_up_thread(&procServ.vka, &thread->vspaceRef->vspace, &thread->sel4utilsThread); vs_unref(thread->vspaceRef); memset(thread, 0, sizeof(struct proc_tcb)); }
refos_err_t proc_set_domain_handler(void *rpc_userptr, int pid, int dom) { printf("\nin set_domain_handler\n"); struct proc_pcb* ppcb = pid_get_pcb(&procServ.PIDList,pid); printf("\nthe name of the process is %s\n", ppcb->debugProcessName); struct proc_tcb* ttcb = (struct proc_tcb*)cvector_get(&ppcb->threads, 0); seL4_CPtr ttcb_cptr = thread_tcb_obj(ttcb); int error = seL4_DomainSet_Set(0xb, dom, ttcb_cptr); if(error){ printf("\nset domain failed!\n"); return 1; } printf("after set domain!\n"); return 0; }