summaryrefslogtreecommitdiff
path: root/sysproc.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-27 13:34:35 +0000
committerrsc <rsc>2007-08-27 13:34:35 +0000
commitefc12b8e616ed3394468c1802da8e1f39e387cd3 (patch)
tree62340875e823c6784bde20077ccebd51cd5b4fe1 /sysproc.c
parente1872bb130da5a9b198ca484da8534304ea9fc79 (diff)
downloadxv6-labs-efc12b8e616ed3394468c1802da8e1f39e387cd3.tar.gz
xv6-labs-efc12b8e616ed3394468c1802da8e1f39e387cd3.tar.bz2
xv6-labs-efc12b8e616ed3394468c1802da8e1f39e387cd3.zip
Replace yield system call with sleep.
Diffstat (limited to 'sysproc.c')
-rw-r--r--sysproc.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sysproc.c b/sysproc.c
index 8cf3291..48fbe37 100644
--- a/sysproc.c
+++ b/sysproc.c
@@ -70,8 +70,21 @@ sys_sbrk(void)
}
int
-sys_yield(void)
+sys_sleep(void)
{
- yield();
+ int n, ticks0;
+
+ if(argint(0, &n) < 0)
+ return -1;
+ acquire(&tickslock);
+ ticks0 = ticks;
+ while(ticks - ticks0 < n){
+ if(cp->killed){
+ release(&tickslock);
+ return -1;
+ }
+ sleep(&ticks, &tickslock);
+ }
+ release(&tickslock);
return 0;
}