Subversion Repositories Kolibri OS

Rev

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