访问过程库中的单例对象时发生访问冲突
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 参数。
希望这可以帮助一些人。
我们正在使用 .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 参数。
希望这可以帮助一些人。