From 62a30d2faa4ca2cd1050acbded30bbffd5bd0b19 Mon Sep 17 00:00:00 2001 From: Bhavna Sharma Date: Wed, 26 Aug 2015 11:26:46 -0700 Subject: [PATCH] Fix for timerfd_create on older kernel revisions BOOTTIME_ALARM and BOOTTIME were added to timerfd_create in kernel version 3.11 and 3.15 respectively. But for targets still on older kernel version we fallback on MONOTONIC. CRs-Fixed: 897805 Change-Id: I47d9780d69ce5ee8c183c84baa93ea3c1a00db57 --- utils/LocTimer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/utils/LocTimer.cpp b/utils/LocTimer.cpp index 277a8135..524897bb 100644 --- a/utils/LocTimer.cpp +++ b/utils/LocTimer.cpp @@ -103,7 +103,7 @@ class LocTimerContainer : public LocHeap { // Poll task to provide epoll call and threading to poll. static LocTimerPollTask* mPollTask; // timer / alarm fd - const int mDevFd; + int mDevFd; // ctor LocTimerContainer(bool wakeOnExpire); // dtor @@ -210,6 +210,13 @@ LocTimerPollTask* LocTimerContainer::mPollTask = NULL; // HwTimer (alarm), when wakeOnExpire is false. LocTimerContainer::LocTimerContainer(bool wakeOnExpire) : mDevFd(timerfd_create(wakeOnExpire ? CLOCK_BOOTTIME_ALARM : CLOCK_BOOTTIME, 0)) { + + if ((-1 == mDevFd) && (errno == EINVAL)) { + LOC_LOGW("%s: timerfd_create failure, fallback to CLOCK_MONOTONIC - %s", + __FUNCTION__, strerror(errno)); + mDevFd = timerfd_create(CLOCK_MONOTONIC, 0); + } + if (-1 != mDevFd) { // ensure we have the necessary resources created LocTimerContainer::getPollTaskLocked();