https://issues.apache.org/bugzilla/show_bug.cgi?id=52770

             Bug #: 52770
           Summary: Potential Bug or Inconsistency in
                    NioBlockingSelector.java
           Product: Tomcat 7
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: msrbugzi...@gmail.com
    Classification: Unclassified


This is Ken Cheung, a Computer Science M.Phil. student. I observed some
code clones in Tomcat and found inconsistent code:

/tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java

103                    try {
104                        if ( att.getWriteLatch()==null ||
att.getWriteLatch().getCount()==0) att.startWriteLatch(1);
105                        poller.add(att,SelectionKey.OP_WRITE,reference);
106                       
att.awaitWriteLatch(writeTimeout,TimeUnit.MILLISECONDS);
107                    }catch (InterruptedException ignore) {
108                        Thread.interrupted();
109                    }
110                    if ( att.getWriteLatch()!=null &&
att.getWriteLatch().getCount()> 0) {
111                        //we got interrupted, but we haven't received
notification from the poller.
112                        keycount = 0;
113                    }else {
114                        //latch countdown has happened
115                        keycount = 1;
116                        att.resetWriteLatch();
117                    }
118    
119                    if (writeTimeout > 0 && (keycount == 0))
120                        timedout = (System.currentTimeMillis() - time) >=
writeTimeout;

/tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java

164                    try {
165                        if ( att.getReadLatch()==null ||
att.getReadLatch().getCount()==0) att.startReadLatch(1);
166                        poller.add(att,SelectionKey.OP_READ, reference);
167                        if (readTimeout < 0) {
168                            att.awaitReadLatch(Long.MAX_VALUE,
TimeUnit.MILLISECONDS);
169                        } else {
170                            att.awaitReadLatch(readTimeout,
TimeUnit.MILLISECONDS);
171                        }
172                    }catch (InterruptedException ignore) {
173                        Thread.interrupted();
174                    }
175                    if ( att.getReadLatch()!=null &&
att.getReadLatch().getCount()> 0) {
176                        //we got interrupted, but we haven't received
notification from the poller.
177                        keycount = 0;
178                    }else {
179                        //latch countdown has happened
180                        keycount = 1;
181                        att.resetReadLatch();
182                    }
183                    if (readTimeout >= 0 && (keycount == 0))
184                        timedout = (System.currentTimeMillis() - time) >=
readTimeout;

Quick description of the inconsistency
Two code snippets are very similar code, but as you see, the first code does
not check "if (readTimeout < 0)" while the second code has the checker.

We thought it could be a potential bug or inconsistency. Hope this helps.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to