---------------------------------------------------------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - PURGE CACHED MEMORY AND TRY AGAIN AFTER ALLOCATING USER OBJECT MEMORY FAILED
January 2026
---------------------------------------------------------------------------------------------------------------
CCB
1. BUG:
If we disable purging cached memory and try again after allocating user object memory failed in Visual FoxPro Advanced,
sometimes it causes the error "There is not enough memory to complete this operation (Error 43)".
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun420d46 :: ; proc near
cmp eax , 0800h ;0x00420d46 : 3d00080000
push ebx ;0x00420d4b : 53
mov ebx , 01h ;0x00420d4c : bb01000000
ja Label506b0c ;0x00420d51 : 0f87b55d0e00
Label420d57 ::
mov edx , dword ptr [ esi + 32 ] ;0x00420d57 : 8b5620
test edx , edx ;0x00420d5a : 85d2
je Label42372c ;0x00420d5c : 0f84ca290000
mov ecx , dword ptr [edx] ;0x00420d62 : 8b0a
mov ecx , dword ptr [ ecx - 4 ] ;0x00420d64 : 8b49fc
sub ecx , 08h ;0x00420d67 : 83e908
cmp ecx , eax ;0x00420d6a : 3bc8
jb Label423743 ;0x00420d6c : 0f82d1290000
Label420d72 ::
mov eax , ebx ;0x00420d72 : 8bc3
pop ebx ;0x00420d74 : 5b
ret ;0x00420d75 : c3
Label506b0c ::
mov byte ptr [ Data936f18 ] , bl ;0x00506b0c : 881d186f9300
jmp Label420d57 ;0x00506b12 : e940a2f1ff
Label42372c ::
;
; ----------------------------------------------------------------------------------------------------
; VFP 9.0 FIX - PURGE CACHED MEMORY AND TRY AGAIN AFTER ALLOCATING USER OBJECT MEMORY FAILED
; April 2021
; ----------------------------------------------------------------------------------------------------
; CCB
;
; Purge cached memory and try again after allocating user object memory failed.
;
; 2021/4/15, by ccb
;
mov ecx , eax
push ecx
pushd 08h ;0x0042372c : 6a08
call Fun42bf2a ;0x0042372e : e8f7870000
mov dword ptr [ esi + 32 ] , eax ;0x00423733 : 894620
;
; ----------------------------------------------------------------------------------------------------
; VFP 9.0 FIX - PURGE CACHED MEMORY AND TRY AGAIN AFTER ALLOCATING USER OBJECT MEMORY FAILED
; April 2021
; ----------------------------------------------------------------------------------------------------
; CCB
;
; Purge cached memory and try again after allocating user object memory failed.
;
; 2021/4/15, by ccb
;
pop ecx
test eax , eax
jne Label423736
cmp dword ptr vfpa_sys9058_data,00h
je Label423736
push ecx
;; Purge Cached File Data Buffer
mov eax , 07FFFFFFFh
call Fun68507b
;; 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
pop ecx
mov eax , ecx
pushd 08h
call Fun42bf2a
mov dword ptr [ esi + 32 ] , eax
jmp Label423736
Label423736 ::
test eax , eax ;0x00423736 : 85c0
je Label58dab7 ;0x00423738 : 0f8479a31600
jmp Label420d72 ;0x0042373e : e92fd6ffff
Label423743 ::
;
; ----------------------------------------------------------------------------------------------------
; VFP 9.0 FIX - PURGE CACHED MEMORY AND TRY AGAIN AFTER ALLOCATING USER OBJECT MEMORY FAILED
; April 2021
; ----------------------------------------------------------------------------------------------------
; CCB
;
; Purge cached memory and try again after allocating user object memory failed.
;
; 2021/4/15, by ccb
;
mov ecx , eax
push ecx
push edx
pushd 00h ;0x00423743 : 6a00
push edx ;0x00423745 : 52
mov ecx , eax ;0x00423746 : 8bc8
call Fun42c2c4 ;0x00423748 : e8778b0000
;
; ----------------------------------------------------------------------------------------------------
; VFP 9.0 FIX - PURGE CACHED MEMORY AND TRY AGAIN AFTER ALLOCATING USER OBJECT MEMORY FAILED
; April 2021
; ----------------------------------------------------------------------------------------------------
; CCB
;
; Purge cached memory and try again after allocating user object memory failed.
;
; 2021/4/15, by ccb
;
pop edx
pop ecx
test eax , eax
jne Label42374d
cmp dword ptr vfpa_sys9058_data,00h
je Label42374d
push ecx
push edx
;; Purge Cached File Data Buffer
mov eax , 07FFFFFFFh
call Fun68507b
;; 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
pop edx
pop ecx
pushd 00h
push edx
mov ecx , ecx
call Fun42c2c4
jmp Label42374d
Label42374d ::
jmp Label423736 ;0x0042374d : ebe7
Label58dab7 ::
test byte ptr [ Data936f10 ] , bl ;0x0058dab7 : 841d106f9300
je Label58dae3 ;0x0058dabd : 7424
mov eax , dword ptr [ Data936f14 ] ;0x0058dabf : a1146f9300
test eax , eax ;0x0058dac4 : 85c0
jne Label58daed ;0x0058dac6 : 7525
mov dword ptr [ esi + 4 ] , ebx ;0x0058dac8 : 895e04
mov dword ptr [ Data936f14 ] , 0B6h ;0x0058dacb : c705146f9300b6000000
mov byte ptr [esi] , 049h ;0x0058dad5 : c60649
mov dword ptr [ esi + 12 ] , 00h ;0x0058dad8 : c7460c00000000
xor eax , eax ;0x0058dadf : 33c0
pop ebx ;0x0058dae1 : 5b
ret ;0x0058dae2 : c3
Label58dae3 ::
mov ecx , 0B6h ;0x0058dae3 : b9b6000000
call Fun544742 ;0x0058dae8 : e8556cfbff
Label58daed ::
mov dword ptr [ esi + 4 ] , ebx ;0x0058daed : 895e04
mov byte ptr [esi] , 049h ;0x0058daf0 : c60649
mov dword ptr [ esi + 12 ] , 00h ;0x0058daf3 : c7460c00000000
xor eax , eax ;0x0058dafa : 33c0
pop ebx ;0x0058dafc : 5b
ret ;0x0058dafd : c3
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_vfp9fix168.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix166.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix167.asp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|