diff options
author | rsc <rsc> | 2007-08-27 13:34:35 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-27 13:34:35 +0000 |
commit | efc12b8e616ed3394468c1802da8e1f39e387cd3 (patch) | |
tree | 62340875e823c6784bde20077ccebd51cd5b4fe1 /sysproc.c | |
parent | e1872bb130da5a9b198ca484da8534304ea9fc79 (diff) | |
download | xv6-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.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -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; } |