You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2006/09/12 07:57:42 UTC
svn commit: r442463 - in
/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda:
ClientThread.java DRDAConnThread.java NetworkServerControlImpl.java
Author: kahatlen
Date: Mon Sep 11 22:57:41 2006
New Revision: 442463
URL: http://svn.apache.org/viewvc?view=rev&rev=442463
Log:
DERBY-1817: Race condition in network server's thread pool
Clean-up of NetworkServerControlImpl:
- moves generation of connection number into addSession()
- adds new method removeThread() which can be used instead of
getThreadList().remove()
- removes methods that are no longer used
- makes methods that are only used by NetworkServerControlImpl private
Modified:
db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/ClientThread.java
db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java
db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java
Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/ClientThread.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/ClientThread.java?view=diff&rev=442463&r1=442462&r2=442463
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/ClientThread.java (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/ClientThread.java Mon Sep 11 22:57:41 2006
@@ -76,14 +76,9 @@
} else throw e1;
break;
} // end priv try/catch block
-
- connNum = parent.getNewConnNum();
- if (parent.getLogConnections())
- parent.consolePropertyMessage("DRDA_ConnNumber.I",
- Integer.toString(connNum));
//create a new Session for this session
- parent.addSession(connNum, clientSocket);
+ parent.addSession(clientSocket);
}catch (Exception e) {
if (e instanceof InterruptedException)
Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java?view=diff&rev=442463&r1=442462&r2=442463
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java Mon Sep 11 22:57:41 2006
@@ -292,7 +292,7 @@
}
if (SanityManager.DEBUG)
trace("Ending connection thread");
- server.getThreadList().removeElement(this);
+ server.removeThread(this);
}
/**
Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java?view=diff&rev=442463&r1=442462&r2=442463
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/NetworkServerControlImpl.java Mon Sep 11 22:57:41 2006
@@ -1856,7 +1856,7 @@
*
* @param clientSession session needing work
*/
- protected void runQueueAdd(Session clientSession)
+ private void runQueueAdd(Session clientSession)
{
synchronized(runQueue)
{
@@ -3094,7 +3094,7 @@
*
* @return value of maximum number of threads
*/
- protected int getMaxThreads()
+ private int getMaxThreads()
{
synchronized(threadsSync) {
return maxThreads;
@@ -3378,11 +3378,19 @@
* there are free threads, and the maximum number of threads is not
* exceeded.
*
- * @param connectionNumber number of connection
+ * <p><code>addSession()</code> should only be called from one thread at a
+ * time.
+ *
* @param clientSocket the socket to read from and write to
*/
- void addSession(int connectionNumber, Socket clientSocket)
- throws IOException {
+ void addSession(Socket clientSocket) throws Exception {
+
+ int connectionNumber = ++connNum;
+
+ if (getLogConnections()) {
+ consolePropertyMessage("DRDA_ConnNumber.I",
+ Integer.toString(connectionNumber));
+ }
// Note that we always re-fetch the tracing configuration because it
// may have changed (there are administrative commands which allow
@@ -3430,41 +3438,13 @@
}
/**
- * Get New Conn Num - for use by ClientThread, generate a new connection number for the attempted Session.
- *
- * @return a new connection number
- */
- protected int getNewConnNum()
- {
- return ++connNum;
- }
-
-
- /**
- * Get Free Threads - for use by ClientThread, get the number of
- * free threads in order to determine if
- * a new thread can be run.
+ * Remove a thread from the thread list. Should be called when a
+ * <code>DRDAConnThread</code> has been closed.
*
- * @return the number of free threads
+ * @param thread the closed thread
*/
- protected int getFreeThreads()
- {
- synchronized(runQueue)
- {
- return freeThreads;
- }
- }
-
- /**
- * Get Thread List - for use by ClientThread, get the thread list
- * Vector so that a newly spawned thread
- * can be run and added to the ThreadList from the ClientThread
- *
- * @return the threadList Vector
- */
- protected Vector getThreadList()
- {
- return threadList;
+ void removeThread(DRDAConnThread thread) {
+ threadList.remove(thread);
}
protected Object getShutdownSync() { return shutdownSync; }