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;