OSDN Git Service

Alarm: Support devices using timerfd without CLOCK_POWEROFF_ALARM
authorKeith Mok <kmok@cyngn.com>
Tue, 23 Feb 2016 23:31:13 +0000 (15:31 -0800)
committerSteve Kondik <steve@cyngn.com>
Tue, 13 Sep 2016 07:12:35 +0000 (00:12 -0700)
timerfd CLOCK_POWEROFF_ALARM is patch from qcom for power off alarm
support in qcom devices. Some old devices or non-qcom devices
does not support CLOCK_POWEROFF_ALARM in timerfd that results in
init_timerfd function fails.

Use fallback mechanism if devices does not support CLOCK_POWEROFF_ALARM
in timerfd use CLOCK_REALTIME instead.

Change-Id: I166f2a3cea21cd6dc67a520e268315076dc4356a

services/core/jni/com_android_server_AlarmManagerService.cpp

index 1c125e2..9f2127c 100644 (file)
@@ -424,6 +424,10 @@ static jlong init_timerfd()
 
     for (size_t i = 0; i < N_ANDROID_TIMERFDS; i++) {
         fds[i] = timerfd_create(android_alarm_to_clockid[i], 0);
+        if ((fds[i] < 0) && (android_alarm_to_clockid[i] == CLOCK_POWEROFF_ALARM)) {
+            ALOGV("timerfd does not support CLOCK_POWEROFF_ALARM, using CLOCK_REALTIME_ALARM instead");
+            fds[i] = timerfd_create(CLOCK_REALTIME_ALARM, 0);
+        }
         if (fds[i] < 0) {
             ALOGV("timerfd_create(%u) failed: %s",  android_alarm_to_clockid[i],
                     strerror(errno));