You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2015/06/24 14:58:50 UTC

[44/50] [abbrv] wicket git commit: FindBugs: Use a special lock object for requestWindow because in #resizeBuffer() requestWindow needs to be re-assigned and locking on its old instance is wrong.

FindBugs: Use a special lock object for requestWindow because in #resizeBuffer() requestWindow needs to be re-assigned and locking on its old instance is wrong.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/12328de3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/12328de3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/12328de3

Branch: refs/heads/master
Commit: 12328de3d63f699b1131addc5e0add306c1d426d
Parents: 03b7913
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sat Jun 20 17:03:22 2015 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Jun 24 14:56:35 2015 +0300

----------------------------------------------------------------------
 .../protocol/http/AbstractRequestLogger.java    | 32 +++++++++++---------
 1 file changed, 18 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/12328de3/wicket-core/src/main/java/org/apache/wicket/protocol/http/AbstractRequestLogger.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AbstractRequestLogger.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AbstractRequestLogger.java
index ce83ab3..0c5d7d0 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AbstractRequestLogger.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AbstractRequestLogger.java
@@ -85,6 +85,13 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 	private RequestData[] requestWindow;
 
 	/**
+	 * A special object used as a lock before accessing {@linkplain #requestWindow}.
+	 * Needed because {@linkplain #requestWindow} is being reassigned in some cases,
+	 * e.g. {@link #resizeBuffer()}
+	 */
+	private final Object requestWindowLock = new Object();
+
+	/**
 	 * Cursor pointing to the current writable location in the buffer. Points to the first empty
 	 * slot or if the buffer has been filled completely to the oldest request in the buffer.
 	 */
@@ -109,7 +116,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 	{
 		int requestsWindowSize = getRequestsWindowSize();
 		requestWindow = new RequestData[requestsWindowSize];
-		liveSessions = new ConcurrentHashMap<String, SessionData>();
+		liveSessions = new ConcurrentHashMap<>();
 	}
 
 	@Override
@@ -142,7 +149,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 	@Override
 	public List<RequestData> getRequests()
 	{
-		synchronized (requestWindow)
+		synchronized (requestWindowLock)
 		{
 			RequestData[] result = new RequestData[hasBufferRolledOver() ? requestWindow.length
 				: indexInWindow];
@@ -242,7 +249,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 
 			addRequest(requestdata);
 
-			SessionData sessiondata = null;
+			SessionData sessiondata;
 			if (sessionId != null)
 			{
 				sessiondata = liveSessions.get(sessionId);
@@ -335,7 +342,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 		// ensure the buffer has the proper installed length
 		resizeBuffer();
 
-		synchronized (requestWindow)
+		synchronized (requestWindowLock)
 		{
 			// if the requestWindow is a zero-length array, nothing gets stored
 			if (requestWindow.length == 0)
@@ -366,19 +373,16 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 
 	private int getWindowSize()
 	{
-		synchronized (requestWindow)
-		{
-			if (requestWindow[requestWindow.length - 1] == null)
-				return indexInWindow;
-			else
-				return requestWindow.length;
-		}
+		if (requestWindow[requestWindow.length - 1] == null)
+			return indexInWindow;
+		else
+			return requestWindow.length;
 	}
 
 	@Override
 	public long getAverageRequestTime()
 	{
-		synchronized (requestWindow)
+		synchronized (requestWindowLock)
 		{
 			int windowSize = getWindowSize();
 			if (windowSize == 0)
@@ -390,7 +394,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 	@Override
 	public long getRequestsPerMinute()
 	{
-		synchronized (requestWindow)
+		synchronized (requestWindowLock)
 		{
 			int windowSize = getWindowSize();
 			if (windowSize == 0)
@@ -439,7 +443,7 @@ public abstract class AbstractRequestLogger implements IRequestLogger
 			return;
 
 		RequestData[] newRequestWindow = new RequestData[newCapacity];
-		synchronized (requestWindow)
+		synchronized (requestWindowLock)
 		{
 			int oldCapacity = requestWindow.length;
 			int oldNumberOfElements = hasBufferRolledOver() ? oldCapacity : indexInWindow;