diff options
| author | Robert Greenwalt <rgreenwalt@google.com> | 2010-11-02 14:08:23 -0700 |
|---|---|---|
| committer | Robert Greenwalt <rgreenwalt@google.com> | 2010-11-04 11:52:35 -0700 |
| commit | 03595d01188d88c169e8c9dd51b357fd545e69cc (patch) | |
| tree | ddad8c3f64f73ee22248c369cf567d8e036aa26d /services/java | |
| parent | b52907f6be7edb3a8b709348af484dd7d646b13e (diff) | |
| download | frameworks_base-03595d01188d88c169e8c9dd51b357fd545e69cc.zip frameworks_base-03595d01188d88c169e8c9dd51b357fd545e69cc.tar.gz frameworks_base-03595d01188d88c169e8c9dd51b357fd545e69cc.tar.bz2 | |
Tell each VM to flush their DNS cache.
bug:3095357
Change-Id: I93de24e3e5a7d8b94d55f4facfffc863a2b8c202
Diffstat (limited to 'services/java')
| -rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 6 | ||||
| -rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 19 |
2 files changed, 25 insertions, 0 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index ee0cc4b..c18262e 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1596,6 +1596,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { } catch (NumberFormatException e) {} } SystemProperties.set("net.dnschange", "" + (n+1)); + /* + * Tell the VMs to toss their DNS caches + */ + Intent intent = new Intent(Intent.ACTION_CLEAR_DNS_CACHE); + intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); + mContext.sendBroadcast(intent); } private void handleDnsConfigurationChange(int netType) { diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 60b2b67..7905dc6 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -959,6 +959,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int CANCEL_HEAVY_NOTIFICATION_MSG = 25; static final int SHOW_STRICT_MODE_VIOLATION_MSG = 26; static final int CHECK_EXCESSIVE_WAKE_LOCKS_MSG = 27; + static final int CLEAR_DNS_CACHE = 28; AlertDialog mUidAlert; @@ -1110,6 +1111,20 @@ public final class ActivityManagerService extends ActivityManagerNative } } } break; + case CLEAR_DNS_CACHE: { + synchronized (ActivityManagerService.this) { + for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) { + ProcessRecord r = mLruProcesses.get(i); + if (r.thread != null) { + try { + r.thread.clearDnsCache(); + } catch (RemoteException ex) { + Slog.w(TAG, "Failed to clear dns cache for: " + r.info.processName); + } + } + } + } + } break; case SHOW_UID_ERROR_MSG: { // XXX This is a temporary dialog, no need to localize. AlertDialog d = new BaseErrorDialog(mContext); @@ -10373,6 +10388,10 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.sendEmptyMessage(UPDATE_TIME_ZONE); } + if (intent.ACTION_CLEAR_DNS_CACHE.equals(intent.getAction())) { + mHandler.sendEmptyMessage(CLEAR_DNS_CACHE); + } + /* * Prevent non-system code (defined here to be non-persistent * processes) from sending protected broadcasts. |
