Consultor Eletrônico



Kbase P25469: Prowin32 cause a GPF General Protection Fault in Windows 200
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   25/11/2003
Status: Unverified

FACT(s) (Environment):

Windows 2000

FACT(s) (Environment):

Progress 9.1B

SYMPTOM(s):

Prowin32 caused a GPF (General Protection Fault)

drwtsn32 Log file contains:

FAULT in function: ComSink::Release

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0012F9F0 0143ECCA 02095FE8 01DFA5F8 01DFF208 00000000 prow32!ComSink::Release (FPO: [1,0,1])
0012FA38 6C386A72 103C76F9 01DFA608 01E7D118 103C5FEC !CWRXFile::~CWRXFile
0012FC00 1024CE23 020B497C 00000002 00000000 0012FC34 !Ordinal5511

CAUSE:

The ComSink::Release entry is related to a connection between Progress and a Com Automation object (with the Enable-Events 4GL Statement). The Release is a Com function, to signal that the sink (the connection point inside Progress) is no longer needed and can be deleted if necessary.

The Ordinal5511 entry is a call to an MFC or ActiveX .dll. Microsoft has many 'hidden' function names in the MFC library.

In 9.1B, the GPF was being generated in Windows2000 systems when you iteratively create & destroy an OCX.

The problem was; ComSink::Release() was returning its member variable ref count, even in cases where it deleted "this". Apparently this had not caused a problem on other Windows OSes. But, possibly due to changes in Windows 2000 memory management, the code frequently ended up trying to access garbage memory in order to get the member variable after deleting itself.

FIX:

Upgrade to a newer Progress version.