summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2010-10-11 11:52:49 -0700
committerBrad Fitzpatrick <bradfitz@android.com>2010-10-11 12:17:16 -0700
commit35ca9d8a357d3e8c514740ebdbab154e865fdbbf (patch)
tree2682e5a7bd42fb1ddfa2af8e990bdceac06ff3fd /services/java
parentc8511af04a442551a204b1f47fabb317bcf54be0 (diff)
downloadframeworks_base-35ca9d8a357d3e8c514740ebdbab154e865fdbbf.zip
frameworks_base-35ca9d8a357d3e8c514740ebdbab154e865fdbbf.tar.gz
frameworks_base-35ca9d8a357d3e8c514740ebdbab154e865fdbbf.tar.bz2
On boot, advance time to at least 1970.
Otherwise various Java APIs start doing their documented "correct" thing, which is to fail. Bug: 3081605 Change-Id: I90f8cde745d2ddab78419e37f60eea1e81a58127
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/SystemServer.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 7f42429..a7785e2 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -35,7 +35,12 @@ import android.content.pm.IPackageManager;
import android.database.ContentObserver;
import android.database.Cursor;
import android.media.AudioService;
-import android.os.*;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.StrictMode;
+import android.os.SystemClock;
+import android.os.SystemProperties;
import android.provider.Contacts.People;
import android.provider.Settings;
import android.server.BluetoothA2dpService;
@@ -581,6 +586,16 @@ public class SystemServer
native public static void init1(String[] args);
public static void main(String[] args) {
+ if (System.currentTimeMillis() < 0) {
+ // If a device's clock is before 1970 (before 0), a lot of
+ // APIs crash dealing with negative numbers, notably
+ // java.io.File#setLastModified, so instead we fake it and
+ // hope that time from cell towers or NTP fixes it
+ // shortly.
+ Slog.w(TAG, "System clock is before 1970; setting to 1970.");
+ SystemClock.setCurrentTimeMillis(1); // 0 isn't allowed
+ }
+
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();