summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/AlarmManagerService.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/AlarmManagerService.java')
-rw-r--r--services/java/com/android/server/AlarmManagerService.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 1ffb427..e088417 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -400,7 +400,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
}
public long timeToNextAlarm() {
- long nextAlarm = 0xfffffffffffffffl;
+ long nextAlarm = Long.MAX_VALUE;
synchronized (mLock) {
for (int i=AlarmManager.RTC_WAKEUP;
i<=AlarmManager.ELAPSED_REALTIME; i++) {
@@ -420,7 +420,18 @@ class AlarmManagerService extends IAlarmManager.Stub {
{
if (mDescriptor != -1)
{
- set(mDescriptor, alarm.type, (alarm.when * 1000 * 1000));
+ // The kernel never triggers alarms with negative wakeup times
+ // so we ensure they are positive.
+ long alarmSeconds, alarmNanoseconds;
+ if (alarm.when < 0) {
+ alarmSeconds = 0;
+ alarmNanoseconds = 0;
+ } else {
+ alarmSeconds = alarm.when / 1000;
+ alarmNanoseconds = (alarm.when % 1000) * 1000 * 1000;
+ }
+
+ set(mDescriptor, alarm.type, alarmSeconds, alarmNanoseconds);
}
else
{
@@ -499,7 +510,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
private native int init();
private native void close(int fd);
- private native void set(int fd, int type, long nanoseconds);
+ private native void set(int fd, int type, long seconds, long nanoseconds);
private native int waitForAlarm(int fd);
private native int setKernelTimezone(int fd, int minuteswest);