---------------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - PURGE CACHED VIRTUAL MEMORY IN THE SYS(1104) FUNCTION January 2024 ---------------------------------------------------------------------------------------- CCB 1. BUG: If we enable purging cached virtual memory in the SYS(1104) function in Visual FoxPro Advanced, it will free more memory, and there is more available memory. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label60930a :: cmp dword ptr [ ebp + 12 ] , 02h ;0x0060930a : 837d0c02 jne Label6093aa ;0x0060930e : 0f8596000000 and dword ptr [ ebp + 0FFFFD0ECh ] , 00h ;0x00609314 : 83a5ecd0ffff00 lea esi , dword ptr [ ebx + 44 ] ;0x0060931b : 8d732c mov edi , esi ;0x0060931e : 8bfe call Fun529a6e ;0x00609320 : e84907f2ff cmp byte ptr [esi] , 049h ;0x00609325 : 803e49 je Label609367 ;0x00609328 : 743d mov eax , esi ;0x0060932a : 8bc6 call Fun42371d ;0x0060932c : e8eca3e1ff mov eax , dword ptr [ ebx + 52 ] ;0x00609331 : 8b4334 inc eax ;0x00609334 : 40 call Fun420d46 ;0x00609335 : e80c7ae1ff mov eax , dword ptr [ ebx + 76 ] ;0x0060933a : 8b434c mov eax , dword ptr [eax] ;0x0060933d : 8b00 mov ecx , dword ptr [ ebx + 52 ] ;0x0060933f : 8b4b34 mov byte ptr [ eax + ecx ] , 00h ;0x00609342 : c6040800 mov eax , dword ptr [ ebx + 76 ] ;0x00609346 : 8b434c mov eax , dword ptr [eax] ;0x00609349 : 8b00 pushd 00h ;0x0060934b : 6a00 push eax ;0x0060934d : 50 call Fun432788 ;0x0060934e : e83594e2ff cmp eax , 0FFFFFFFFh ;0x00609353 : 83f8ff je Label609375 ;0x00609356 : 741d mov edx , eax ;0x00609358 : 8bd0 call Fun531d42 ;0x0060935a : e8e389f2ff test eax , eax ;0x0060935f : 85c0 je Label609375 ;0x00609361 : 7412 mov ecx , eax ;0x00609363 : 8bc8 jmp Label60936a ;0x00609365 : eb03 Label609367 :: mov ecx , dword ptr [ ebx + 56 ] ;0x00609367 : 8b4b38 Label60936a :: call Fun421627 ;0x0060936a : e8b882e1ff mov dword ptr [ ebp + 0FFFFD0ECh ] , eax ;0x0060936f : 8985ecd0ffff Label609375 :: mov edi , dword ptr [ ebp + 0FFFFD0ECh ] ;0x00609375 : 8bbdecd0ffff test edi , edi ;0x0060937b : 85ff jne Label609389 ;0x0060937d : 750a mov esi , 0385h ;0x0060937f : be85030000 call Fun452790 ;0x00609384 : e80794e4ff Label609389 :: mov eax , dword ptr [edi] ;0x00609389 : 8b07 mov esi , 0100h ;0x0060938b : be00010000 test dword ptr [ eax + 32 ] , esi ;0x00609390 : 857020 jne Label6093b4 ;0x00609393 : 751f mov eax , dword ptr [eax] ;0x00609395 : 8b00 call Fun53b58b ;0x00609397 : e8ef21f3ff test dword ptr [ eax + 44 ] , esi ;0x0060939c : 85702c je Label6093b4 ;0x0060939f : 7413 mov esi , edi ;0x006093a1 : 8bf7 call Fun524ba6 ;0x006093a3 : e8feb7f1ff jmp Label6093b4 ;0x006093a8 : eb0a Label6093aa :: mov eax , 07FFFFFFFh ;0x006093aa : b8ffffff7f call Fun68507b ;0x006093af : e8c7bc0700 ; ; ----------------------------------------------------------------------------- ; VFP 9.0 FIX - PURGE CACHED VIRTUAL MEMORY IN THE SYS(1104) FUNCTION ; April 2021 ; ----------------------------------------------------------------------------- ; CCB ; ; Purge cached virtual memory in the SYS(1104) function. ; ; 2021/4/15, by ccb ; Label6093b1 :: cmp dword ptr vfpa_sys9057_data,00h je Label6093b2 ;; Purge Cached Virtual Memory push esi push ecx lea esi , dword ptr [ esp ] mov dword ptr [ esp ] , 07FFFFFFFh call Fun7e0c91 pop ecx pop esi IF VFPA_VERSION GE 102 ;; Purge Cached Large Memory call vfpa_lmm_purgecachedmemory ENDIF IF VFPA_VERSION GE 102 ;; Set Process Working Set Size for Large Memory call vfpa_lmm_setprocessworkingsetsize ENDIF Label6093b2 :: IF VFPA_VERSION GE 102 mov eax , 07FFFFFFFh call Fun68507b test eax , eax je Label6093b4 cmp dword ptr vfpa_sys9057_data,00h je Label6093b3 ;; Purge Cached Virtual Memory push esi push ecx lea esi , dword ptr [ esp ] mov dword ptr [ esp ] , 07FFFFFFFh call Fun7e0c91 pop ecx pop esi IF VFPA_VERSION GE 102 ;; Purge Cached Large Memory call vfpa_lmm_purgecachedmemory ENDIF IF VFPA_VERSION GE 102 ;; Set Process Working Set Size for Large Memory call vfpa_lmm_setprocessworkingsetsize ENDIF Label6093b3 :: jmp Label6093b2 ENDIF Label6093b4 :: pushd 00h ;0x006093b4 : 6a00 pushd 00h ;0x006093b6 : 6a00 jmp Label4558d4 ;0x006093b8 : e917c5e4ff 4. APPLIES TO: VFP 6.0.8167.0 VFP 6.0.8961.0 (SP5) VFP 7.0.0.9262 VFP 7.0.0.9465 (SP1) VFP 8.0.0.2521 VFP 8.0.0.3117 (SP1) VFP 9.0.0.2412 VFP 9.0.0.3504 (SP1) VFP 9.0.0.4611 (SP2) VFP 9.0.0.5015 (SP2) VFP 9.0.0.5411 (SP2) VFP 9.0.0.5721 (SP2) VFP 9.0.0.5815 (SP2) VFP 9.0.0.6303 (SP2) VFP 9.0.0.6602 (SP2) VFP 9.0.0.7423 (SP2) The bug has been fixed in VFP Advanced. 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix166.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix168.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix169.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |