Rev 8876 | Rev 9715 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8876 | Rev 9709 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License. ;; |
4 | ;; Distributed under terms of the GNU General Public License. ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 8876 $ |
8 | $Revision: 9709 $ |
9 | 9 | ||
Line 10... | Line 10... | ||
10 | F_READ = 0x0001 ; file opened for reading |
10 | F_READ = 0x0001 ; file opened for reading |
Line 179... | Line 179... | ||
179 | lea ecx, [ebp+PIPE.wlist] |
179 | lea ecx, [ebp+PIPE.wlist] |
180 | cmp ecx, [ebp+PIPE.wlist.next] |
180 | cmp ecx, [ebp+PIPE.wlist.next] |
181 | je @F |
181 | je @F |
Line 182... | Line 182... | ||
182 | 182 | ||
183 | mov ecx, [ecx+MUTEX_WAITER.task] |
183 | mov ecx, [ecx+MUTEX_WAITER.task] |
184 | mov [ecx+TASKDATA.state], TSTATE_RUNNING ;activate writer task |
184 | mov [ecx + APPDATA.state], TSTATE_RUNNING ;activate writer task |
185 | @@: |
185 | @@: |
186 | cmp [ebp+PIPE.count], 0 |
186 | cmp [ebp+PIPE.count], 0 |
Line 187... | Line 187... | ||
187 | je @F |
187 | je @F |
188 | 188 | ||
189 | lea eax, [ebp+PIPE.rlist] |
189 | lea eax, [ebp+PIPE.rlist] |
Line 190... | Line 190... | ||
190 | cmp eax, [ebp+PIPE.rlist.next] |
190 | cmp eax, [ebp+PIPE.rlist.next] |
191 | je @F |
191 | je @F |
192 | 192 | ||
193 | mov eax, [eax+MUTEX_WAITER.task] |
193 | mov eax, [eax+MUTEX_WAITER.task] |
194 | mov [eax+TASKDATA.state], TSTATE_RUNNING ;activate reader task |
194 | mov [eax + APPDATA.state], TSTATE_RUNNING ;activate reader task |
195 | @@: |
195 | @@: |
Line 196... | Line 196... | ||
196 | lea ecx, [ebp+PIPE.pipe_lock] |
196 | lea ecx, [ebp+PIPE.pipe_lock] |
197 | call mutex_unlock |
197 | call mutex_unlock |
198 | ret |
198 | ret |
Line 199... | Line 199... | ||
199 | 199 | ||
200 | .wait: |
200 | .wait: |
201 | pushfd |
201 | pushfd |
202 | cli |
202 | cli |
Line 203... | Line 203... | ||
203 | 203 | ||
Line 204... | Line 204... | ||
204 | sub esp, sizeof.MUTEX_WAITER |
204 | sub esp, sizeof.MUTEX_WAITER |
205 | mov ebx, [TASK_BASE] |
205 | mov ebx, [current_slot] |
Line 206... | Line 206... | ||
206 | mov [esp+MUTEX_WAITER.task], ebx |
206 | mov [esp+MUTEX_WAITER.task], ebx |
207 | lea edx, [ebp+PIPE.rlist] |
207 | lea edx, [ebp+PIPE.rlist] |
Line 208... | Line 208... | ||
208 | 208 | ||
209 | list_add_tail esp, edx ;esp= new waiter, edx= list head |
209 | list_add_tail esp, edx ;esp= new waiter, edx= list head |
Line 274... | Line 274... | ||
274 | lea eax, [ebp+PIPE.rlist] |
274 | lea eax, [ebp+PIPE.rlist] |
275 | cmp eax, [ebp+PIPE.rlist.next] |
275 | cmp eax, [ebp+PIPE.rlist.next] |
276 | je @F |
276 | je @F |
Line 277... | Line 277... | ||
277 | 277 | ||
278 | mov eax, [eax+MUTEX_WAITER.task] |
278 | mov eax, [eax+MUTEX_WAITER.task] |
279 | mov [eax+TASKDATA.state], TSTATE_RUNNING ;activate reader task |
279 | mov [eax + APPDATA.state], TSTATE_RUNNING ;activate reader task |
280 | @@: |
280 | @@: |
281 | cmp [ebp+PIPE.count], 4096 |
281 | cmp [ebp+PIPE.count], 4096 |
Line 282... | Line 282... | ||
282 | je @F |
282 | je @F |
283 | 283 | ||
284 | lea ecx, [ebp+PIPE.wlist] |
284 | lea ecx, [ebp+PIPE.wlist] |
Line 285... | Line 285... | ||
285 | cmp ecx, [ebp+PIPE.wlist.next] |
285 | cmp ecx, [ebp+PIPE.wlist.next] |
286 | je @F |
286 | je @F |
287 | 287 | ||
288 | mov ecx, [eax+MUTEX_WAITER.task] |
288 | mov ecx, [eax+MUTEX_WAITER.task] |
Line 289... | Line 289... | ||
289 | mov [ecx+TASKDATA.state], TSTATE_RUNNING ;activate writer task |
289 | mov [ecx + APPDATA.state], TSTATE_RUNNING ;activate writer task |
290 | @@: |
290 | @@: |
Line 303... | Line 303... | ||
303 | .wait: |
303 | .wait: |
304 | pushfd |
304 | pushfd |
305 | cli |
305 | cli |
Line 306... | Line 306... | ||
306 | 306 | ||
307 | sub esp, sizeof.MUTEX_WAITER |
307 | sub esp, sizeof.MUTEX_WAITER |
308 | mov ecx, [TASK_BASE] |
308 | mov ecx, [current_slot] |
309 | mov [esp+MUTEX_WAITER.task], ecx |
309 | mov [esp+MUTEX_WAITER.task], ecx |
Line 310... | Line 310... | ||
310 | lea edx, [ebp+PIPE.wlist] |
310 | lea edx, [ebp+PIPE.wlist] |
Line 311... | Line 311... | ||
311 | 311 | ||
312 | list_add_tail esp, edx ;esp= new waiter, edx= list head |
312 | list_add_tail esp, edx ;esp= new waiter, edx= list head |
Line 313... | Line 313... | ||
313 | 313 | ||
314 | lea ecx, [ebp+PIPE.pipe_lock] |
314 | lea ecx, [ebp+PIPE.pipe_lock] |
Line 315... | Line 315... | ||
315 | call mutex_unlock |
315 | call mutex_unlock |
316 | 316 |