You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2014/01/22 14:11:22 UTC
[jira] [Resolved] (DERBY-6455) Infinite loop in
NetworkServerControlImpl.ensureDataInBuffer
[ https://issues.apache.org/jira/browse/DERBY-6455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Knut Anders Hatlen resolved DERBY-6455.
---------------------------------------
Resolution: Fixed
Fix Version/s: 10.11.0.0
10.10.1.4
Issue & fix info: High Value Fix,Known fix (was: High Value Fix,Known fix,Patch Available)
> Infinite loop in NetworkServerControlImpl.ensureDataInBuffer
> ------------------------------------------------------------
>
> Key: DERBY-6455
> URL: https://issues.apache.org/jira/browse/DERBY-6455
> Project: Derby
> Issue Type: Bug
> Components: Network Server
> Affects Versions: 10.10.1.1
> Reporter: Martin JANDA
> Priority: Critical
> Fix For: 10.10.1.4, 10.11.0.0
>
> Attachments: d6455-1a.diff
>
>
> NetworkServerControlImpl.ensureDataInBuffer missing check for return -1 (EOF) from 'clientIs.read'. When read returns -1 thread consumes 100% CPU. Method NetworkServerControlImpl.fillReplyBuffer correctly throw exception.
> Fix: add two lines:
> private void ensureDataInBuffer(int minimumBytesNeeded) throws Exception
> {
> // make sure the buffer is large enough
> while ((replyBufferCount - replyBufferPos) < minimumBytesNeeded)
> {
> try {
> int bytesRead = clientIs.read(replyBuffer, replyBufferCount, replyBuffer.length - replyBufferCount);
> + if (bytesRead == -1)
> + consolePropertyMessage("DRDA_InvalidReplyTooShort.S", true);
> replyBufferCount += bytesRead;
>
> } catch (IOException e)
> {
> clientSocketError(e);
> }
> }
> }
> StackTrace:
> java.lang.Thread.State: RUNNABLE
> at java.net.SocketInputStream.read(Unknown Source:-1)
> at org.apache.derby.impl.drda.NetworkServerControlImpl.ensureDataInBuffer(Unknown Source:-1)
> at org.apache.derby.impl.drda.NetworkServerControlImpl.readLDString(Unknown Source:-1)
> at org.apache.derby.impl.drda.NetworkServerControlImpl.readStringReply(Unknown Source:-1)
> at org.apache.derby.impl.drda.NetworkServerControlImpl.runtimeInfo(Unknown Source:-1)
> at org.apache.derby.drda.NetworkServerControl.getRuntimeInfo(Unknown Source:-1)
> at com.crcdata.dbadmin.server.DerbyEngine.getRuntimeInfo(DerbyEngine.java:134)
> at com.crcdata.dbadmin.server.DerbyEngine$DerbyServerMonitorTask.run(DerbyEngine.java:305)
> at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source:-1)
> at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source:-1)
> at java.util.concurrent.FutureTask.run(Unknown Source:-1)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source:-1)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source:-1)
> at java.lang.Thread.run(Unknown Source:-1)
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)