static unsigned int mem_available; /* kB */
+static int memory_killer_event_fd = -1;
+
struct memory_killer_threshold {
const char *name;
const int default_ratio; /* % */
static enum memory_level last_level = MEMORY_LEVEL_NORMAL;
enum memory_level cur_level;
int ret;
+ unsigned long long dummy_state;
+
+ if (read(memory_killer_event_fd, &dummy_state, sizeof(dummy_state)) == -1)
+ return TRUE;
cur_level = memory_killer_get_memory_level();
if (cur_level == last_level)
API int memory_killer_init(void)
{
int ret;
- int fd = -1;
GIOChannel *channel;
GSource *source;
return ret;
}
- fd = cgroup_open_eventfd(CGROUP_MEMORY, "memory.pressure_level", "low");
- if (fd < 0) {
+ memory_killer_event_fd = cgroup_open_eventfd(CGROUP_MEMORY, "memory.pressure_level", "low");
+ if (memory_killer_event_fd < 0) {
_E("Failed to open eventfd (%d)", ret);
g_hash_table_destroy(memory_killer_whitelist);
return ret;
}
- channel = g_io_channel_unix_new(fd);
+ channel = g_io_channel_unix_new(memory_killer_event_fd);
g_assert(channel);
+ if (g_io_channel_set_encoding(channel, NULL, NULL) != G_IO_STATUS_NORMAL)
+ _W("Failed to set the encoding of channel");
+ g_io_channel_set_buffered(channel, FALSE);
source = g_io_create_watch(channel, G_IO_IN);
g_assert(source);