From e45abfa083cacdd858feb7c6bcf0b03647a37989 Mon Sep 17 00:00:00 2001 From: Mykola Kondratenko Date: Mon, 18 Jan 2016 12:43:30 +0100 Subject: [PATCH] Alarm: add missing closedir after opendir when searching for RTC It is mandatory that closedir() is called to deallocate DIR structure allocated by opendir(). Fix degrade introduced by Google commit 0eb58268. Change-Id: Ia12154f7f822153b4fc8e6bfb8b2bae17bc45c1a --- .../core/jni/com_android_server_AlarmManagerService.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/jni/com_android_server_AlarmManagerService.cpp b/services/core/jni/com_android_server_AlarmManagerService.cpp index 5cbb277a2f126..246ab0d259f4e 100644 --- a/services/core/jni/com_android_server_AlarmManagerService.cpp +++ b/services/core/jni/com_android_server_AlarmManagerService.cpp @@ -40,6 +40,8 @@ #include #include +#include + namespace android { static const size_t N_ANDROID_TIMERFDS = ANDROID_ALARM_TYPE_COUNT + 1; @@ -323,14 +325,14 @@ static bool rtc_is_hctosys(unsigned int rtc_id) static int wall_clock_rtc() { - DIR *dir = opendir(rtc_sysfs); - if (!dir) { + std::unique_ptr dir(opendir(rtc_sysfs), closedir); + if (!dir.get()) { ALOGE("failed to open %s: %s", rtc_sysfs, strerror(errno)); return -1; } struct dirent *dirent; - while (errno = 0, dirent = readdir(dir)) { + while (errno = 0, dirent = readdir(dir.get())) { unsigned int rtc_id; int matched = sscanf(dirent->d_name, "rtc%u", &rtc_id);