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);