访问过程库中的单例对象时发生访问冲突

Access violation whenever accessing a singleton object in the procedure library

我们正在使用 .pl 压缩特定应用服务器上的所有 .r 代码 运行。我们现在发现在访问库中的一些程序时出现了一些问题。

我们似乎注意到只有单例对象才有这些问题。

目前我们可以通过从 .pl 中删除文件并将它们放在 .pl 之前的目录中来解决问题。

我们正在使用 Progress 版本 11.6.3。

这些是我们发现有问题的 classes 的例子。

USING Progress.Lang.*.

ROUTINE-LEVEL ON ERROR UNDO, THROW.

CLASS GROUP.prg.rep.Singleton: 
DEFINE PRIVATE STATIC VARIABLE Instance AS Singleton NO-UNDO.

/*------------------------------------------------------------------------------
        @Purpose   : basic private constructor                                                        
------------------------------------------------------------------------------*/
CONSTRUCTOR PRIVATE Singleton ():
END CONSTRUCTOR.    

/*------------------------------------------------------------------------------
        @Purpose   : get the instance of the class                                                         
------------------------------------------------------------------------------*/
METHOD PUBLIC STATIC Singleton GetInstance ():
    IF NOT VALID-OBJECT (Instance) THEN 
      Instance = NEW Singleton().
    RETURN Instance. 
END METHOD.

END CLASS.

我已经从这个 class 中删除了一些重要信息,因为我无法共享公司代码,但这一原则在我们所有的问题中都是相同的。

=====================================================
PROGRESS stack trace as of Fri Mar 22 13:53:36 2019
=====================================================

Progress OpenEdge Release 11.6 build 1442 SP04 on WINNT 

Startup parameters:
-pf E:\Progress\OpenEdge6\startup.pf,-cpinternal ISO8859-1,-cpstream 
ISO8859-1,-cpcoll Basic,-cpcase Basic,-d dmy,-numsep 46,-numdec 44,(end 
.pf),-b,-pf E:\OpenEdge\WRK6\MENU_PF\MENUD.pf,-h 10, -d dmy,-L 1000,-inp 
32000,-E,-lng 2,-s 15000,-TB 31,-TM 32,-Bt 15000,-mmax 10000,-l 12500,-tok 
4000,-T E:\TMP,-yd,-yx,-D 10000,-reusableObjects 10000,(end .pf),-basekey 
INI,-ininame E:\OpenEdge\WRK6\Menu_PF\ICE.ini,-p IndexationStartup.p,- 
param 0005#1292#1#22/03/2019 13:53:24,260+01:00

Exception code: C0000005 ACCESS_VIOLATION
Fault address:  00007FF60600E74D 01:000000000048D74D 
E:\Progress\OpenEdge6\bin\_progres.exe

Registers:
RAX:0000000000000001
RBX:0000000020B75C00
RCX:0000000000000000
RDX:000000002155C240
RSI:0000000000000523
RDI:00007FF6066FE180
R8 :0000000000000104
R9 :0000000000000443
R10:000000000600E000
R11:00007FF605B80000
R12:0000000000000080
R13:00000000003E9000
R14:0000002000001000
R15:0000000001000000
CS:RIP:0033:00007FF60600E74D
SS:RSP:002B:000000000051E730  RBP:0000000000000001
DS:002B  ES:002B  FS:0053  GS:002B
Flags:00010202

Call Stack:
Address           Frame
00007FF60600E74D  000000000051E770  Progress::ClrBridge::ITypeManager::operator=+74E6D
00007FF606039A19  000000000051E7A0  Progress::ClrBridge::ITypeManager::operator=+A0139
00007FF605FF22D6  000000000051E7D0  Progress::ClrBridge::ITypeManager::operator=+589F6
00007FF605FC9C9B  000000000051E860  Progress::ClrBridge::ITypeManager::operator=+303BB
00007FF605FCA4D3  000000000051EA70  Progress::ClrBridge::ITypeManager::operator=+30BF3
00007FF605FCABAE  000000000051EAD0  Progress::ClrBridge::ITypeManager::operator=+312CE
00007FF605BDDFC0  000000000051EB60  common_srvrLogFile+4C840
00007FF605BE0E85  000000000051EC20  common_srvrLogFile+4F705
00007FF605FC54FC  000000000051ECA0  Progress::ClrBridge::ITypeManager::operator=+2BC1C
00007FF605FC6CF4  000000000051ED00  Progress::ClrBridge::ITypeManager::operator=+2D414
00007FF605FC6E08  000000000051ED60  Progress::ClrBridge::ITypeManager::operator=+2D528
00007FF605BFAA56  000000000051EE20  common_srvrLogFile+692D6
00007FF605FE6FA5  000000000051EF20  Progress::ClrBridge::ITypeManager::operator=+4D6C5
00007FF60600A959  000000000051EFD0  Progress::ClrBridge::ITypeManager::operator=+71079
00007FF606014B7A  000000000051F000  Progress::ClrBridge::ITypeManager::operator=+7B29A
00007FF605FC71FE  000000000051F030  Progress::ClrBridge::ITypeManager::operator=+2D91E
00007FF605FC91EB  000000000051F0C0  Progress::ClrBridge::ITypeManager::operator=+2F90B
00007FF605FCA28A  000000000051F2F0  Progress::ClrBridge::ITypeManager::operator=+309AA
00007FF605FCA507  000000000051F500  Progress::ClrBridge::ITypeManager::operator=+30C27
00007FF605FCAA96  000000000051F560  Progress::ClrBridge::ITypeManager::operator=+311B6
00007FF605BCD418  000000000051F700  common_srvrLogFile+3BC98
00007FF605BFAA56  000000000051F7C0  common_srvrLogFile+692D6
00007FF605FE81BA  000000000051FA40  Progress::ClrBridge::ITypeManager::operator=+4E8DA
00007FF605FE9F9E  000000000051FAA0  Progress::ClrBridge::ITypeManager::operator=+506BE
00007FF60600A959  000000000051FB50  Progress::ClrBridge::ITypeManager::operator=+71079
00007FF606014B7A  000000000051FB80  Progress::ClrBridge::ITypeManager::operator=+7B29A
00007FF605C1F74F  000000000051FBB0  dbut_utclex+1F5BF
00007FF605BAB5E8  000000000051FDC0  common_srvrLogFile+19E68
00007FF605C3E8F3  000000000051FDF0  dbut_utclex+3E763
00007FF6063A7ABE  000000000051FE20  Progress::ClrBridge::rnProFromClr::FindOnPropath+13530E
00007FFF5D2B13D2  000000000051FE50  BaseThreadInitThunk+22
00007FFF5F9654F4  000000000051FEA0  RtlUserThreadStart+34

我在 Progress 知识库中找不到任何关于此的内容(我没有找到),假设您正在维护中,您可能应该使用 Progress Support 创建一个案例。

您也可以尝试更新的 Progress 版本或至少更新 11.6 的服务包,11.6.4 似乎可用。

我们已经打开了一个进度案例并得出结论,我们正在使用 .pf 文件中的 -Yd 参数。这会导致一些使用单例对象的脏错误。进展仍在寻找如何解决这个问题,但我们的解决方法只是删除 -yd 参数。

希望这可以帮助一些人。