Mercurial > hg > Members > anatofuz > CbC_xv6
comparison src/pipe.c @ 35:ad1d3b268e2d
update
author | mir3636 |
---|---|
date | Fri, 22 Feb 2019 16:32:51 +0900 |
parents | 83c23a36980d |
children | d4e5846ddb48 |
comparison
equal
deleted
inserted
replaced
34:a7144583914c | 35:ad1d3b268e2d |
---|---|
114 wakeup(&p->nread); //DOC: pipewrite-wakeup1 | 114 wakeup(&p->nread); //DOC: pipewrite-wakeup1 |
115 release(&p->lock); | 115 release(&p->lock); |
116 return n; | 116 return n; |
117 } | 117 } |
118 | 118 |
119 int cbc_piperead(struct pipe *p, char *addr, int n, __code (*next)(int ret)) | |
120 { | |
121 int i; | |
122 | |
123 acquire(&p->lock); | |
124 | |
125 while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty | |
126 if(proc->killed){ | |
127 release(&p->lock); | |
128 goto next(-1); | |
129 } | |
130 | |
131 sleep(&p->nread, &p->lock); //DOC: piperead-sleep*/ | |
132 } | |
133 | |
134 for(i = 0; i < n; i++){ //DOC: piperead-copy | |
135 if(p->nread == p->nwrite) { | |
136 break; | |
137 } | |
138 | |
139 addr[i] = p->data[p->nread++ % PIPESIZE]; | |
140 } | |
141 | |
142 goto cbc_wakeup(&p->nwrite); //DOC: piperead-wakeup | |
143 release(&p->lock); | |
144 | |
145 return i; | |
146 } | |
119 int piperead(struct pipe *p, char *addr, int n) | 147 int piperead(struct pipe *p, char *addr, int n) |
120 { | 148 { |
121 int i; | 149 int i; |
122 | 150 |
123 acquire(&p->lock); | 151 acquire(&p->lock); |