]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/kern/thread_object.cpp
update
[l4.git] / kernel / fiasco / src / kern / thread_object.cpp
index 4c24387417a91c4d818d97c453732022e65a42fa..6d6fa049aaf7a6b7b1db2080e0e1d7f947daeff6 100644 (file)
@@ -176,7 +176,7 @@ Thread_object::sys_vcpu_resume(L4_msg_tag const &tag, Utcb *utcb)
   Vcpu_state *vcpu = vcpu_state().access(true);
 
   L4_obj_ref user_task = vcpu->user_task;
-  if (user_task.valid())
+  if (user_task.valid() && user_task.op() == 0)
     {
       L4_fpage::Rights task_rights = L4_fpage::Rights(0);
       Task *task = Kobject::dcast<Task*>(s->lookup_local(user_task.cap(),
@@ -188,7 +188,7 @@ Thread_object::sys_vcpu_resume(L4_msg_tag const &tag, Utcb *utcb)
       if (task != vcpu_user_space())
         vcpu_set_user_space(task);
 
-      vcpu->user_task = L4_obj_ref();
+      reinterpret_cast<Mword &>(vcpu->user_task) |= L4_obj_ref::Ipc_send;
     }
   else if (user_task.op() == L4_obj_ref::Ipc_reply)
     vcpu_set_user_space(0);