Shutdown all connections when sync service is hung
* When a sync thread receives an alarm due to a missed socket timeout on an HttpPost, we try to abort the HttpPost. * At times, however, the HttpPost cannot be aborted and the thread hangs indefinitely. * In this CL, we try to break this vicious cycle by shutting down our ClientConnectionManager when this case is detected. This should, in turn, close all of our socket connections, causing the sync threads to generate IOExceptions and terminate. * After appropriate IOException waits, new sync threads should then be able to run normally. Bug: 2615293 Change-Id: Idea6c3653cd60822d6260e0c5a7dad790ee25858
This commit is contained in:
parent
4713110b02
commit
2341e096e6
@ -1177,6 +1177,11 @@ public class SyncManager extends Service implements Runnable {
|
||||
return sClientConnectionManager;
|
||||
}
|
||||
|
||||
static private synchronized void shutdownConnectionManager() {
|
||||
sClientConnectionManager.shutdown();
|
||||
sClientConnectionManager = null;
|
||||
}
|
||||
|
||||
public static void stopAccountSyncs(long acctId) {
|
||||
SyncManager syncManager = INSTANCE;
|
||||
if (syncManager != null) {
|
||||
@ -1448,6 +1453,9 @@ public class SyncManager extends Service implements Runnable {
|
||||
// thread to do the work
|
||||
log("Alarm failed; releasing mailbox");
|
||||
syncManager.releaseMailbox(id);
|
||||
// Shutdown the connection manager; this should close all of our
|
||||
// sockets and generate IOExceptions all around.
|
||||
syncManager.shutdownConnectionManager();
|
||||
}
|
||||
}
|
||||
}}).start();
|
||||
|
Loading…
Reference in New Issue
Block a user