24
24
import java .util .LinkedList ;
25
25
import java .util .Map ;
26
26
import java .util .WeakHashMap ;
27
+ import java .lang .ref .WeakReference ;
27
28
import java .util .concurrent .Executors ;
28
29
import java .util .concurrent .Future ;
29
30
import java .util .concurrent .ThreadPoolExecutor ;
@@ -76,7 +77,7 @@ public class AsyncHttpClient {
76
77
private DefaultHttpClient httpClient ;
77
78
private HttpContext httpContext ;
78
79
private ThreadPoolExecutor threadPool ;
79
- private Map <Context , List <Future >> requestMap ;
80
+ private Map <Context , List <WeakReference < Future > >> requestMap ;
80
81
81
82
public AsyncHttpClient (String userAgent ) {
82
83
BasicHttpParams httpParams = new BasicHttpParams ();
@@ -125,7 +126,7 @@ public void process(HttpResponse response, HttpContext context) {
125
126
126
127
threadPool = (ThreadPoolExecutor )Executors .newCachedThreadPool ();
127
128
128
- requestMap = new WeakHashMap <Context , List <Future >>();
129
+ requestMap = new WeakHashMap <Context , List <WeakReference < Future > >>();
129
130
}
130
131
131
132
public void setCookieStore (CookieStore cookieStore ) {
@@ -186,10 +187,13 @@ public void post(Context context, String url, RequestParams params, AsyncHttpRes
186
187
}
187
188
188
189
public void cancelRequests (Context context , boolean mayInterruptIfRunning ) {
189
- List <Future > requestList = requestMap .get (context );
190
+ List <WeakReference < Future > > requestList = requestMap .get (context );
190
191
if (requestList != null ) {
191
- for (Future request : requestList ) {
192
- request .cancel (mayInterruptIfRunning );
192
+ for (WeakReference <Future > requestRef : requestList ) {
193
+ Future request = requestRef .get ();
194
+ if (request != null ) {
195
+ request .cancel (mayInterruptIfRunning );
196
+ }
193
197
}
194
198
}
195
199
requestMap .remove (context );
@@ -199,13 +203,16 @@ private void sendRequest(DefaultHttpClient client, HttpContext httpContext, Http
199
203
Future request = threadPool .submit (new AsyncHttpRequest (client , httpContext , uriRequest , responseHandler ));
200
204
201
205
if (context != null ) {
202
- List <Future > requestList = requestMap .get (context );
206
+ // Add request to request map
207
+ List <WeakReference <Future >> requestList = requestMap .get (context );
203
208
if (requestList == null ) {
204
- requestList = new LinkedList <Future >();
209
+ requestList = new LinkedList <WeakReference < Future > >();
205
210
requestMap .put (context , requestList );
206
211
}
207
212
208
- requestList .add (request );
213
+ requestList .add (new WeakReference <Future >(request ));
214
+
215
+ // TODO: Remove dead weakrefs from requestLists?
209
216
}
210
217
}
211
218
0 commit comments