Bug #6118
bug with RADIO-SET (and maybe other widgets) in down frames
Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:
0%
billable:
No
vendor_id:
GCD
case_num:
version_reported:
version_resolved:
History
#1 Updated by Constantin Asofiei over 2 years ago
In #6109, there was a bug where a frame was considered 0 DOWN
, and it had RADIO-SET widgets. It ended up with this exception:
[02/25/2022 20:47:48 EET] (com.goldencode.p2j.util.Utils:WARNING) An exception during query of Directory service. java.lang.NullPointerException at com.goldencode.p2j.security.SecurityManager.getAccountIds(SecurityManager.java:3814) at com.goldencode.p2j.util.Utils.lambda$getDirectoryNodeWorker$1(Utils.java:3295) at com.goldencode.p2j.util.Utils.doWithBoundDS(Utils.java:3472) at com.goldencode.p2j.util.Utils.getDirectoryNodeWorker(Utils.java:3270) at com.goldencode.p2j.util.Utils.getDirectoryNodeStrings(Utils.java:2890) at com.goldencode.p2j.directory.DirectoryServer.getStrings(DirectoryServer.java:114) at com.goldencode.p2j.ui.WidgetDescriptorHelper.loadFromDirectory(WidgetDescriptorHelper.java:117) at com.goldencode.p2j.ui.WidgetDescriptorHelper.access$000(WidgetDescriptorHelper.java:79) at com.goldencode.p2j.ui.WidgetDescriptorHelper$1.initialValue(WidgetDescriptorHelper.java:94) at com.goldencode.p2j.ui.WidgetDescriptorHelper$1.initialValue(WidgetDescriptorHelper.java:90) at com.goldencode.p2j.security.ContextLocal.get(ContextLocal.java:492) at com.goldencode.p2j.security.ContextLocal.get(ContextLocal.java:430) at com.goldencode.p2j.ui.WidgetDescriptorHelper.getDescriptors(WidgetDescriptorHelper.java:106) at com.goldencode.p2j.ui.ConfigManager.registerExternalWidgetConfigs(ConfigManager.java:265) at com.goldencode.p2j.ui.ServerConfigManager.<init>(ServerConfigManager.java:95) at com.goldencode.p2j.ui.ConfigManager$1.initialValue(ConfigManager.java:145) at com.goldencode.p2j.ui.ConfigManager$1.initialValue(ConfigManager.java:142) at com.goldencode.p2j.security.ContextLocal.get(ContextLocal.java:492) at com.goldencode.p2j.security.ContextLocal.get(ContextLocal.java:430) at com.goldencode.p2j.ui.ConfigManager.getInstance(ConfigManager.java:257) at com.goldencode.p2j.ui.WidgetConfig.getConfigManager(WidgetConfig.java:566) at com.goldencode.p2j.aspects.ui.ConfigFieldSetterAspect.beforeSetField(ConfigFieldSetterAspect.java:130) at com.goldencode.p2j.ui.ControlSetConfig.init(ControlSetConfig.java:313) at com.goldencode.p2j.ui.ControlSetConfig.<init>(ControlSetConfig.java:175) at com.goldencode.p2j.ui.RadioSetConfig.<init>(RadioSetConfig.java:126) at sun.reflect.GeneratedConstructorAccessor340.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:1102) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2171) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1667) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:503) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:461) at com.goldencode.p2j.ui.ScreenBuffer.lambda$readExternal$3(ScreenBuffer.java:1301) at com.goldencode.util.NativeTypeSerializer.readArray(NativeTypeSerializer.java:1296) at com.goldencode.p2j.ui.ScreenBuffer.readExternal(ScreenBuffer.java:1301) at com.goldencode.util.NativeTypeSerializer.readExtNotNull(NativeTypeSerializer.java:1393) at com.goldencode.util.NativeTypeSerializer.readExternalizable(NativeTypeSerializer.java:1370) at com.goldencode.util.PayloadSerializer.readItem(PayloadSerializer.java:824) at com.goldencode.util.PayloadSerializer.readPayload(PayloadSerializer.java:560) at com.goldencode.util.PayloadSerializer.readArray(PayloadSerializer.java:702) at com.goldencode.util.PayloadSerializer.readPayload(PayloadSerializer.java:558) at com.goldencode.p2j.net.Message.lambda$readExternal$0(Message.java:430) at com.goldencode.p2j.jmx.NanoTimer.timer(NanoTimer.java:126) at com.goldencode.p2j.net.Message.readExternal(Message.java:429) at com.goldencode.p2j.net.SyncMessage.readExternal(SyncMessage.java:150) at com.goldencode.p2j.net.Protocol$Reader.byteArrayToObj(Protocol.java:557) at com.goldencode.p2j.net.Protocol$Reader.run(Protocol.java:465) at java.lang.Thread.run(Thread.java:748)
This just prevents loading the directory-plugged widget types, when executing on the Reader thread. Considering that these widgets (for now) can't be used in a DOWN frame, it should be enough to prevent loading of these widgets, if we are not on a context thread.
A contextless thread may be able to be identified via SecurityManager.getThreadId()
which will return a null
for non-context threads and a unique Integer
for threads which currently have a context set. The cost is a synchronized block and a map lookup.