Rev 887 | Rev 889 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 887 | Rev 888 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. 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: 887 $ |
8 | $Revision: 888 $ |
9 | 9 | ||
Line 147... | Line 147... | ||
147 | test al, USED_BLOCK |
147 | test al, USED_BLOCK |
148 | jz .cantfree |
148 | jz .cantfree |
149 | test al, DONT_FREE_BLOCK |
149 | test al, DONT_FREE_BLOCK |
150 | jnz .cantfree |
150 | jnz .cantfree |
Line -... | Line 151... | ||
- | 151 | ||
- | 152 | push edi |
|
151 | 153 | ||
152 | and eax, not 4095 |
154 | and eax, not 4095 |
153 | mov ecx, eax |
155 | mov edi, eax |
154 | or al, FREE_BLOCK |
156 | or al, FREE_BLOCK |
155 | mov [page_tabs+(esi-1)*4], eax |
157 | mov [page_tabs+(esi-1)*4], eax |
156 | sub ecx, 4096 |
158 | sub edi, 4096 |
157 | mov ebx, ecx |
159 | mov ebx, edi |
158 | shr ecx, 12 |
160 | shr edi, 12 |
159 | jz .released |
161 | jz .released |
160 | .release: |
162 | .release: |
161 | xor eax, eax |
163 | xor ecx, ecx |
162 | xchg eax, [page_tabs+esi*4] |
164 | xchg ecx, [page_tabs+esi*4] |
163 | test al, 1 |
165 | test cl, 1 |
- | 166 | jz @F |
|
164 | jz @F |
167 | |
165 | call free_page |
168 | call @core_free@4 |
166 | mov eax, esi |
169 | mov eax, esi |
167 | shl eax, 12 |
170 | shl eax, 12 |
168 | invlpg [eax] |
171 | invlpg [eax] |
169 | @@: |
172 | @@: |
170 | inc esi |
173 | inc esi |
171 | dec ecx |
174 | dec edi |
172 | jnz .release |
175 | jnz .release |
173 | .released: |
- | |
174 | push edi |
- | |
175 | 176 | .released: |
|
176 | mov edx, [current_slot] |
177 | mov edx, [current_slot] |
177 | mov esi, dword [edx+APPDATA.heap_base] |
178 | mov esi, dword [edx+APPDATA.heap_base] |
178 | mov edi, dword [edx+APPDATA.heap_top] |
179 | mov edi, dword [edx+APPDATA.heap_top] |
179 | sub ebx, [edx+APPDATA.mem_size] |
180 | sub ebx, [edx+APPDATA.mem_size] |
Line 274... | Line 275... | ||
274 | add edx, ecx |
275 | add edx, ecx |
275 | add ebx, ecx |
276 | add ebx, ecx |
276 | cmp edx, ebx |
277 | cmp edx, ebx |
277 | jb .realloc_add |
278 | jb .realloc_add |
278 | ; release part of allocated memory |
279 | ; release part of allocated memory |
- | 280 | ||
- | 281 | push ecx |
|
279 | .loop: |
282 | .loop: |
280 | cmp edx, ebx |
283 | cmp edx, ebx |
281 | jz .release_done |
284 | jz .release_done |
282 | dec edx |
285 | dec edx |
283 | xor eax, eax |
286 | xor ecx, ecx |
284 | xchg eax, [page_tabs+edx*4] |
287 | xchg ecx, [page_tabs+edx*4] |
285 | test al, 1 |
288 | test al, 1 |
286 | jz .loop |
289 | jz .loop |
- | 290 | ||
- | 291 | push edx |
|
287 | call free_page |
292 | call @core_free@4 |
- | 293 | pop edx |
|
288 | mov eax, edx |
294 | mov eax, edx |
289 | shl eax, 12 |
295 | shl eax, 12 |
290 | invlpg [eax] |
296 | invlpg [eax] |
291 | jmp .loop |
297 | jmp .loop |
292 | .release_done: |
298 | .release_done: |
- | 299 | ||
- | 300 | pop ecx |
|
- | 301 | ||
293 | sub ebx, ecx |
302 | sub ebx, ecx |
294 | cmp ebx, 1 |
303 | cmp ebx, 1 |
295 | jnz .nofreeall |
304 | jnz .nofreeall |
296 | mov eax, [page_tabs+ecx*4] |
305 | mov eax, [page_tabs+ecx*4] |
297 | and eax, not 0xFFF |
306 | and eax, not 0xFFF |