Mercurial > hg > Members > anatofuz > CbC_xv6
diff src/pipe.c @ 37:fb3e5a2f76c1
fix
author | mir3636 |
---|---|
date | Fri, 22 Feb 2019 22:36:17 +0900 |
parents | d4e5846ddb48 |
children |
line wrap: on
line diff
--- a/src/pipe.c Fri Feb 22 22:15:33 2019 +0900 +++ b/src/pipe.c Fri Feb 22 22:36:17 2019 +0900 @@ -119,6 +119,7 @@ __code cbc_piperead3(){ struct pipe *p = proc->cbc_arg.cbc_console_arg.p; int i = proc->cbc_arg.cbc_console_arg.i; + __code(*next)(int ret) = proc->cbc_arg.cbc_console_arg.next; release(&p->lock); goto next(i); @@ -129,10 +130,7 @@ int n = proc->cbc_arg.cbc_console_arg.n; struct pipe *p = proc->cbc_arg.cbc_console_arg.p; char *addr = proc->cbc_arg.cbc_console_arg.addr; - if (i < n) { - if(p->nread == p->nwrite) { - break; - } + if (i < n && !(p->nread == p->nwrite)) { addr[i] = p->data[p->nread++ % PIPESIZE]; i ++; proc->cbc_arg.cbc_console_arg.i = i; @@ -146,6 +144,7 @@ __code cbc_piperead1(){ struct pipe *p = proc->cbc_arg.cbc_console_arg.p; + __code(*next)(int ret) = proc->cbc_arg.cbc_console_arg.next; if (p->nread == p->nwrite && p->writeopen){ if(proc->killed){ release(&p->lock); @@ -166,6 +165,7 @@ proc->cbc_arg.cbc_console_arg.n = n; proc->cbc_arg.cbc_console_arg.p = p; proc->cbc_arg.cbc_console_arg.addr = addr; + proc->cbc_arg.cbc_console_arg.next = next; goto cbc_piperead1(); }