> On 13 Dec 2015, at 22:38, Chris Hegarty <chris.hega...@oracle.com> wrote: > > Thanks for looking at this Sergey. > >> On 13 Dec 2015, at 11:16, Sergey Bylokhov <sergey.bylok...@oracle.com> wrote: >> >> Hi, Chris. >> What is the reason to use assertion? If the problem is not theoretical, >
That was tricky to spot :-) nearly missed it. > Hmm… The queue is “unbounded”, but actually has a capacity of > Integer.MAX_VALUE. I suspect that this will never be reached, but > I accept your comment. Maybe add(E) is more appropriate? add() > either succeeds, or fails with IllegalStateException. Since the queue is not "capacity-restricted" i think add(E) is the more appropriate choice, as is the ISE in this context. It’s hard to imagine the applet event queue reaching the MAX_VALUE limit, if so it suggests there are other problems. — I suspect this use of queues in AppletPanel could be cleaned up given the usages of with synchronised blocks (and the sun.misc.Queue style is probably a hangover from the java.util.Vector days). Anyway, that’s for another day if the AWT devs want to take that on :-) Paul. > >> then probably OOM(or something like that) will be better? > > I don’t think OOM is quite right. Maybe ISE, as above is better? > > -Chris. > > >> On 11/12/15 20:22, Chris Hegarty wrote: >>> More technical debt in sun.misc… >>> >>> Java SE has had support for Queues in Collections for many major releases, >>> sun.misc.Queue seems to predate that. I cannot find any usages outside of >>> the >>> JDK, and just one in the JDK, AppletPanel. LinkedBlockingQueue appears to >>> provide the necessary minimum functionality required by AppletPanel, FIFO >>> blocking operations. >>> >>> The changes are quite small so I just included the diffs inline. >>> >>> Note: we could use either add(E) or offer(E) below, I don’t have a strong >>> opinion >>> either way. >>> >>> $ hg rm src/java.base/share/classes/sun/misc/Queue.java >>> >>> diff --git a/src/java.desktop/share/classes/sun/applet/AppletPanel.java >>> b/src/java.desktop/share/classes/sun/applet/AppletPanel.java >>> --- a/src/java.desktop/share/classes/sun/applet/AppletPanel.java >>> +++ b/src/java.desktop/share/classes/sun/applet/AppletPanel.java >>> @@ -38,6 +38,7 @@ >>> import java.security.*; >>> import java.util.*; >>> import java.util.Locale; >>> +import java.util.concurrent.LinkedBlockingQueue; >>> import sun.awt.AWTAccessor; >>> import sun.awt.AppContext; >>> import sun.awt.EmbeddedFrame; >>> @@ -45,7 +46,6 @@ >>> import sun.misc.ManagedLocalsThread; >>> import sun.misc.MessageUtils; >>> import sun.misc.PerformanceLogger; >>> -import sun.misc.Queue; >>> import sun.security.util.SecurityConstants; >>> >>> /** >>> @@ -247,8 +247,7 @@ >>> /** >>> * AppletEvent Queue >>> */ >>> - private Queue<Integer> queue = null; >>> - >>> + private LinkedBlockingQueue<Integer> queue = null; >>> >>> public synchronized void addAppletListener(AppletListener l) { >>> listeners = AppletEventMulticaster.add(listeners, l); >>> @@ -276,10 +275,10 @@ >>> synchronized(this) { >>> if (queue == null) { >>> //System.out.println("SEND0= " + id); >>> - queue = new Queue<>(); >>> + queue = new LinkedBlockingQueue<>(); >>> } >>> - Integer eventId = Integer.valueOf(id); >>> - queue.enqueue(eventId); >>> + boolean inserted = queue.offer(id); >>> + assert inserted; >>> notifyAll(); >>> } >>> if (id == APPLET_QUIT) { >>> @@ -303,8 +302,8 @@ >>> while (queue == null || queue.isEmpty()) { >>> wait(); >>> } >>> - Integer eventId = queue.dequeue(); >>> - return new AppletEvent(this, eventId.intValue(), null); >>> + int eventId = queue.take(); >>> + return new AppletEvent(this, eventId, null); >>> } >>> >>> boolean emptyEventQueue() { >>> >>> -Chris. >>> >> >> >> -- >> Best regards, Sergey. >
signature.asc
Description: Message signed with OpenPGP using GPGMail