Project

General

Profile

Bug #6118

bug with RADIO-SET (and maybe other widgets) in down frames

Added by Constantin Asofiei over 2 years ago. Updated over 2 years ago.

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.

Also available in: Atom PDF