aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/volley/toolbox/JsonRequest.java
diff options
context:
space:
mode:
authorAnonymous <no-reply@google.com>2017-10-09 10:53:24 -0700
committerJeff Davidson <jpd@google.com>2017-10-11 12:28:08 -0700
commit82e4a43fe78d4f665985b4e4726ff2baee449fe8 (patch)
tree19e615b27d9cb80945f86cadc0a7ccca09cc1dee /src/main/java/com/android/volley/toolbox/JsonRequest.java
parent2021ca6a6c3fa80646220cb97746f0b1cd3ae103 (diff)
downloadvolley-82e4a43fe78d4f665985b4e4726ff2baee449fe8.tar.gz
Import of Volley from GitHub to AOSP.
- 95f64de9bfa2ee44d6cf93a6dc4b980e5ec56f6a Fix leak of callbacks on canceled requests. by Jeff Davidson <jpd236@cornell.edu> GitOrigin-RevId: 95f64de9bfa2ee44d6cf93a6dc4b980e5ec56f6a Change-Id: I9537a9937f9c0e7078dfa8f8fdfcd8deb36417a7
Diffstat (limited to 'src/main/java/com/android/volley/toolbox/JsonRequest.java')
-rw-r--r--src/main/java/com/android/volley/toolbox/JsonRequest.java22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/main/java/com/android/volley/toolbox/JsonRequest.java b/src/main/java/com/android/volley/toolbox/JsonRequest.java
index 40877b1..f291076 100644
--- a/src/main/java/com/android/volley/toolbox/JsonRequest.java
+++ b/src/main/java/com/android/volley/toolbox/JsonRequest.java
@@ -39,7 +39,11 @@ public abstract class JsonRequest<T> extends Request<T> {
private static final String PROTOCOL_CONTENT_TYPE =
String.format("application/json; charset=%s", PROTOCOL_CHARSET);
- private final Listener<T> mListener;
+ /** Lock to guard mListener as it is cleared on cancel() and read on delivery. */
+ private final Object mLock = new Object();
+
+ // @GuardedBy("mLock")
+ private Listener<T> mListener;
private final String mRequestBody;
/**
@@ -62,9 +66,21 @@ public abstract class JsonRequest<T> extends Request<T> {
}
@Override
+ public void cancel() {
+ super.cancel();
+ synchronized (mLock) {
+ mListener = null;
+ }
+ }
+
+ @Override
protected void deliverResponse(T response) {
- if (mListener != null) {
- mListener.onResponse(response);
+ Response.Listener<T> listener;
+ synchronized (mLock) {
+ listener = mListener;
+ }
+ if (listener != null) {
+ listener.onResponse(response);
}
}