Class SelectorGuard


  • public class SelectorGuard
    extends java.lang.Object
    Temp class designed to help detect Selector anomalies and cleanly re-open if necessary. NOTE: As of JVM 1.4.2_03, after network connection disconnect/reconnect, usually-blocking select() and select(long) calls no longer block, and will instead return immediately. This can cause selector spinning and 100% cpu usage. See: http://forum.java.sun.com/thread.jsp?forum=4&thread=293213 http://developer.java.sun.com/developer/bugParade/bugs/4850373.html http://developer.java.sun.com/developer/bugParade/bugs/4881228.html Fixed in JVM 1.4.2_05+ and 1.5b2+ The workaround applied for the above is Thread.sleep() to avoid CPU hogging.
    • Field Detail

      • SELECTOR_SPIN_THRESHOLD

        private static final int SELECTOR_SPIN_THRESHOLD
        See Also:
        Constant Field Values
      • marked

        private boolean marked
      • consecutiveZeroSelects

        private int consecutiveZeroSelects
      • beforeSelectTime

        private long beforeSelectTime
      • select_op_time

        private long select_op_time
      • type

        private final java.lang.String type
      • ignores

        private int ignores
    • Constructor Detail

      • SelectorGuard

        public SelectorGuard​(java.lang.String _type)
        Create a new SelectorGuard with the given failed count threshold.
    • Method Detail

      • getType

        public java.lang.String getType()
      • markPreSelectTime

        public void markPreSelectTime()
        Run this method right before the select() operation to mark the start time.
      • verifySelectorIntegrity

        public void verifySelectorIntegrity​(int num_keys_ready,
                                            long time_threshold)
        Checks whether selector is still OK, and not spinning.