diff --git a/thermald-1.6-dont_terminate_the_thermald_engine_if_thd_engine_is_null.patch b/thermald-1.6-dont_terminate_the_thermald_engine_if_thd_engine_is_null.patch new file mode 100644 index 0000000..a760bae --- /dev/null +++ b/thermald-1.6-dont_terminate_the_thermald_engine_if_thd_engine_is_null.patch @@ -0,0 +1,37 @@ +From 18989faac5138213a99f63346e49f4279caad9fb Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Thu, 20 Apr 2017 18:40:47 +0100 +Subject: [PATCH] Don't terminate the thermald engine if thd_engine is null + +It is possible for a signal to occur before the thermald engine +is up and running and hence trying to call the terminate method +will result in a segmentation fault. Check to see if thd_engine +is non-null before invoking thd_engine_terminate. + +Fixes bug http://bugs.launchpad.net/bugs/1677427 + +Note: I was able to reproduce the bug by inserting a +kill(getpid(), SIGTERM) after the signal handler was installed +and before the thermald engine is started to reliably trip the +issue. There is just a very small window where this bug can +actually can occur. + +Signed-off-by: Colin Ian King +--- + src/main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/main.cpp b/src/main.cpp +index 14bd912..36abe7b 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -137,7 +137,8 @@ bool check_thermald_running() { + + // SIGTERM & SIGINT handler + void sig_int_handler(int signum) { +- thd_engine->thd_engine_terminate(); ++ if (thd_engine) ++ thd_engine->thd_engine_terminate(); + sleep(1); + if (g_main_loop) + g_main_loop_quit(g_main_loop); diff --git a/thermald-1.6-fix_dbus_re-init_accessing_deleted_pointer.patch b/thermald-1.6-fix_dbus_re-init_accessing_deleted_pointer.patch new file mode 100644 index 0000000..72b8947 --- /dev/null +++ b/thermald-1.6-fix_dbus_re-init_accessing_deleted_pointer.patch @@ -0,0 +1,40 @@ +From 9c5d8354dd8efff340a030c05f7beda03061cd0a Mon Sep 17 00:00:00 2001 +From: testuser +Date: Thu, 29 Jun 2017 17:24:51 -0700 +Subject: [PATCH] Fix dbus re-init accessing deleted pointer + +As Colin King found, there is issue during reinit. +thd_engine is deleted and then getting accessed. +So store the parameters before deleting the thd_engine. +--- + src/thd_dbus_interface.cpp | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/thd_dbus_interface.cpp b/src/thd_dbus_interface.cpp +index b8e4ab0..6d0265d 100644 +--- a/src/thd_dbus_interface.cpp ++++ b/src/thd_dbus_interface.cpp +@@ -199,10 +199,6 @@ gboolean thd_dbus_interface_terminate(PrefObject *obj, GError **error) { + gboolean thd_dbus_interface_reinit(PrefObject *obj, GError **error) { + bool exclusive_control = false; + +- thd_engine->thd_engine_terminate(); +- sleep(1); +- delete thd_engine; +- sleep(2); + if (thd_engine->get_control_mode() == EXCLUSIVE) + exclusive_control = true; + +@@ -211,6 +207,12 @@ gboolean thd_dbus_interface_reinit(PrefObject *obj, GError **error) { + if (!config_file.empty()) + conf_file = config_file.c_str(); + ++ thd_engine->thd_engine_terminate(); ++ sleep(1); ++ delete thd_engine; ++ sleep(2); ++ ++ + if (thd_engine_create_default_engine(true, exclusive_control, + conf_file) != THD_SUCCESS) { + return FALSE; diff --git a/thermald-1.6-fix_typo_on_field_name_default_prefernce.patch b/thermald-1.6-fix_typo_on_field_name_default_prefernce.patch new file mode 100644 index 0000000..dcf2308 --- /dev/null +++ b/thermald-1.6-fix_typo_on_field_name_default_prefernce.patch @@ -0,0 +1,69 @@ +From 8f7d49be960dd19edaef452a89b541e4509caef7 Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Tue, 18 Apr 2017 17:16:09 +0100 +Subject: [PATCH] fix typo on field name default_prefernce + +Fix typo, default_prefernce should be default_preference + +Signed-off-by: Colin Ian King +--- + src/thd_parse.cpp | 10 +++++----- + src/thd_parse.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/thd_parse.cpp b/src/thd_parse.cpp +index e96f9d0..b2828d1 100644 +--- a/src/thd_parse.cpp ++++ b/src/thd_parse.cpp +@@ -467,7 +467,7 @@ int cthd_parse::parse_new_platform_info(xmlNode * a_node, xmlDoc *doc, + xmlNode *cur_node = NULL; + char *tmp_value; + +- info_ptr->default_prefernce = PREF_ENERGY_CONSERVE; ++ info_ptr->default_preference = PREF_ENERGY_CONSERVE; + + for (cur_node = a_node; cur_node; cur_node = cur_node->next) { + if (cur_node->type == XML_ELEMENT_NODE) { +@@ -488,9 +488,9 @@ int cthd_parse::parse_new_platform_info(xmlNode * a_node, xmlDoc *doc, + "Preference")) { + char *pref_val = char_trim(tmp_value); + if (pref_val && !strcasecmp(pref_val, "PERFORMANCE")) +- info_ptr->default_prefernce = PREF_PERFORMANCE; ++ info_ptr->default_preference = PREF_PERFORMANCE; + else +- info_ptr->default_prefernce = PREF_ENERGY_CONSERVE; ++ info_ptr->default_preference = PREF_ENERGY_CONSERVE; + } else if (!strcasecmp((const char*) cur_node->name, + "ThermalZones")) { + parse_thermal_zones(cur_node->children, doc, info_ptr); +@@ -592,7 +592,7 @@ void cthd_parse::dump_thermal_conf() { + thd_log_info(" *** Index %u ***\n", i); + thd_log_info("Name: %s\n", thermal_info_list[i].name.c_str()); + thd_log_info("UUID: %s\n", thermal_info_list[i].uuid.c_str()); +- thd_log_info("type: %d\n", thermal_info_list[i].default_prefernce); ++ thd_log_info("type: %d\n", thermal_info_list[i].default_preference); + + for (unsigned int j = 0; j < thermal_info_list[i].sensors.size(); ++j) { + thd_log_info("\tSensor %u \n", j); +@@ -807,7 +807,7 @@ int cthd_parse::set_default_preference() { + cthd_preference thd_pref; + int ret; + +- if (thermal_info_list[matched_thermal_info_index].default_prefernce ++ if (thermal_info_list[matched_thermal_info_index].default_preference + == PREF_PERFORMANCE) + ret = thd_pref.set_preference("PERFORMANCE"); + else +diff --git a/src/thd_parse.h b/src/thd_parse.h +index 3b19a8e..6d7e890 100644 +--- a/src/thd_parse.h ++++ b/src/thd_parse.h +@@ -115,7 +115,7 @@ typedef struct { + std::string name; + std::string uuid; + std::string product_name; +- int default_prefernce; ++ int default_preference; + std::vector sensors; + std::vector zones; + std::vector cooling_devs; diff --git a/thermald-1.6-remove_duplicate_assignment_to_critical_temp.patch b/thermald-1.6-remove_duplicate_assignment_to_critical_temp.patch new file mode 100644 index 0000000..93cc053 --- /dev/null +++ b/thermald-1.6-remove_duplicate_assignment_to_critical_temp.patch @@ -0,0 +1,25 @@ +From e311dc88d3acac7eca593efea5d95507b02608da Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Thu, 13 Apr 2017 12:03:53 +0100 +Subject: [PATCH] remove duplicate assignment to critical_temp + +critical_temp is being assigned to zero twice, remove one of them +as it is redundant. + +Signed-off-by: Colin Ian King +--- + src/thd_zone_cpu.cpp | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/thd_zone_cpu.cpp b/src/thd_zone_cpu.cpp +index b6da9bf..051cbf8 100644 +--- a/src/thd_zone_cpu.cpp ++++ b/src/thd_zone_cpu.cpp +@@ -51,7 +51,6 @@ cthd_zone_cpu::cthd_zone_cpu(int index, std::string path, int package_id) : + } + + int cthd_zone_cpu::init() { +- critical_temp = 0; + int temp = 0; + bool found = false; + diff --git a/thermald-1.6-removed_compile_flags.patch b/thermald-1.6-removed_compile_flags.patch new file mode 100644 index 0000000..e72b92a --- /dev/null +++ b/thermald-1.6-removed_compile_flags.patch @@ -0,0 +1,37 @@ +From 90169f80a70efd4d5b6101e87666cd355dbd786f Mon Sep 17 00:00:00 2001 +From: Srinivas Pandruvada +Date: Fri, 2 Jun 2017 08:04:57 -0700 +Subject: [PATCH] Removed compile flags + +Removed -fpermissive and -fopenmp. +--- + Android.mk | 2 +- + Makefile.am | 2 -- + 2 files changed, 1 insertion(+), 3 deletions(-) + +diff --git a/Android.mk b/Android.mk +index 092053d..8ef9cf3 100644 +--- a/Android.mk ++++ b/Android.mk +@@ -43,7 +43,7 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH) $(thermald_src_path) \ + system/core/include/ + + LOCAL_MODULE_TAGS := optional +-LOCAL_CFLAGS := -fpermissive -DTDRUNDIR='"/data/thermal-daemon"' -DTDCONFDIR='"/system/etc/thermal-daemon"' ++LOCAL_CFLAGS := -DTDRUNDIR='"/data/thermal-daemon"' -DTDCONFDIR='"/system/etc/thermal-daemon"' + LOCAL_STATIC_LIBRARIES := libxml2 + LOCAL_SHARED_LIBRARIES := liblog libcutils libdl libc++ libicuuc libicui18n libbinder libutils + LOCAL_PRELINK_MODULE := false +diff --git a/Makefile.am b/Makefile.am +index 1ac26ed..ee96893 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -11,8 +11,6 @@ AM_CXXFLAGS = ${DBUS_CFLAGS}\ + -DTDRUNDIR=\"$(tdrundir)\" \ + -DTDCONFDIR=\"$(tdconfdir)\" \ + -I src \ +- -fpermissive \ +- -fopenmp \ + -Wreorder \ + -Wsign-compare \ + -Wreturn-type \ diff --git a/thermald-1.6-rhbz1464548.patch b/thermald-1.6-rhbz1464548.patch new file mode 100644 index 0000000..8f166ab --- /dev/null +++ b/thermald-1.6-rhbz1464548.patch @@ -0,0 +1,12 @@ +Index: thermal_daemon-1.6/tools/thermal_monitor/thermaldinterface.cpp +=================================================================== +--- thermal_daemon-1.6.orig/tools/thermal_monitor/thermaldinterface.cpp ++++ thermal_daemon-1.6/tools/thermal_monitor/thermaldinterface.cpp +@@ -453,6 +453,7 @@ int ThermaldInterface::getZoneInformatio + info.name = result.arguments().at(0).toString(); + info.sensor_count = result.arguments().at(1).toInt(); + info.trip_count = result.arguments().at(2).toInt(); ++ info.lowest_valid_index = 0; + return 0; + } else { + qCritical() << "error from" << iface->interface() << result.errorMessage(); diff --git a/thermald-1.6-thd_parse_check_for_xmlNodeListGetString_NULL_returns.patch b/thermald-1.6-thd_parse_check_for_xmlNodeListGetString_NULL_returns.patch new file mode 100644 index 0000000..8fdf96c --- /dev/null +++ b/thermald-1.6-thd_parse_check_for_xmlNodeListGetString_NULL_returns.patch @@ -0,0 +1,243 @@ +From 7ee77cce542b2ed0421133b01904d5ad0ecdab6f Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Thu, 13 Apr 2017 12:27:53 +0100 +Subject: [PATCH] thd_parse: check for xmlNodeListGetString NULL returns + +Although it is unlikely, it is possible for xmlNodeListGetString to return +NULL, so null check the return and only parse the returned string if it +is non-null. + +Signed-off-by: Colin Ian King +--- + src/thd_parse.cpp | 185 ++++++++++++++++++++++++++++-------------------------- + 1 file changed, 95 insertions(+), 90 deletions(-) + +diff --git a/src/thd_parse.cpp b/src/thd_parse.cpp +index f5e0870..e96f9d0 100644 +--- a/src/thd_parse.cpp ++++ b/src/thd_parse.cpp +@@ -112,20 +112,21 @@ int cthd_parse::parse_new_trip_cdev(xmlNode * a_node, xmlDoc *doc, + DEBUG_PARSER_PRINT("node type: Element, name: %s value: %s\n", cur_node->name, xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1)); + tmp_value = (char *) xmlNodeListGetString(doc, + cur_node->xmlChildrenNode, 1); +- if (!strcasecmp((const char*) cur_node->name, "type")) { +- trip_cdev->type.assign((const char*) tmp_value); +- string_trim(trip_cdev->type); +- } else if (!strcasecmp((const char*) cur_node->name, "influence")) { +- trip_cdev->influence = atoi(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, +- "SamplingPeriod")) { +- trip_cdev->sampling_period = atoi(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, +- "TargetState")) { +- trip_cdev->target_state = atoi(tmp_value); +- } +- if (tmp_value) ++ if (tmp_value) { ++ if (!strcasecmp((const char*) cur_node->name, "type")) { ++ trip_cdev->type.assign((const char*) tmp_value); ++ string_trim(trip_cdev->type); ++ } else if (!strcasecmp((const char*) cur_node->name, "influence")) { ++ trip_cdev->influence = atoi(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "SamplingPeriod")) { ++ trip_cdev->sampling_period = atoi(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "TargetState")) { ++ trip_cdev->target_state = atoi(tmp_value); ++ } + xmlFree(tmp_value); ++ } + } + } + +@@ -223,15 +224,16 @@ int cthd_parse::parse_pid_values(xmlNode * a_node, xmlDoc *doc, + DEBUG_PARSER_PRINT("node type: Element, name: %s value: %s\n", cur_node->name, xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1)); + tmp_value = (char*) xmlNodeListGetString(doc, + cur_node->xmlChildrenNode, 1); +- if (!strcasecmp((const char*) cur_node->name, "Kp")) { +- pid_ptr->Kp = atof(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, "Kd")) { +- pid_ptr->Kd = atof(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, "Ki")) { +- pid_ptr->Ki = atof(tmp_value); +- } +- if (tmp_value) ++ if (tmp_value) { ++ if (!strcasecmp((const char*) cur_node->name, "Kp")) { ++ pid_ptr->Kp = atof(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, "Kd")) { ++ pid_ptr->Kd = atof(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, "Ki")) { ++ pid_ptr->Ki = atof(tmp_value); ++ } + xmlFree(tmp_value); ++ } + } + } + +@@ -281,47 +283,48 @@ int cthd_parse::parse_new_cooling_dev(xmlNode * a_node, xmlDoc *doc, + DEBUG_PARSER_PRINT("node type: Element, name: %s value: %s\n", cur_node->name, xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1)); + tmp_value = (char*) xmlNodeListGetString(doc, + cur_node->xmlChildrenNode, 1); +- if (!strcasecmp((const char *) cur_node->name, "Index")) { +- cdev->index = atoi(tmp_value); +- } else if (!strcasecmp((const char *) cur_node->name, "Type")) { +- cdev->type_string.assign((const char*) tmp_value); +- string_trim(cdev->type_string); +- } else if (!strcasecmp((const char *) cur_node->name, "Path")) { +- cdev->mask |= CDEV_DEF_BIT_PATH; +- cdev->path_str.assign((const char*) tmp_value); +- string_trim(cdev->path_str); +- } else if (!strcasecmp((const char *) cur_node->name, "MinState")) { +- cdev->mask |= CDEV_DEF_BIT_MIN_STATE; +- cdev->min_state = atoi(tmp_value); +- } else if (!strcasecmp((const char *) cur_node->name, "MaxState")) { +- cdev->mask |= CDEV_DEF_BIT_MAX_STATE; +- cdev->max_state = atoi(tmp_value); +- } else if (!strcasecmp((const char *) cur_node->name, +- "IncDecStep")) { +- cdev->mask |= CDEV_DEF_BIT_STEP; +- cdev->inc_dec_step = atoi(tmp_value); +- } else if (!strcasecmp((const char *) cur_node->name, "ReadBack")) { +- cdev->mask |= CDEV_DEF_BIT_READ_BACK; +- cdev->read_back = atoi(tmp_value); +- } else if (!strcasecmp((const char *) cur_node->name, +- "DebouncePeriod")) { +- cdev->mask |= CDEV_DEF_BIT_DEBOUNCE_VAL; +- cdev->debounce_interval = atoi(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, +- "PidControl")) { +- cdev->mask |= CDEV_DEF_BIT_PID_PARAMS; +- cdev->pid_enable = true; +- parse_pid_values(cur_node->children, doc, &cdev->pid); +- } else if (!strcasecmp((const char *) cur_node->name, +- "AutoOffMode")) { +- cdev->mask |= CDEV_DEF_BIT_AUTO_DOWN; +- if (atoi(tmp_value)) +- cdev->auto_down_control = true; +- else +- cdev->auto_down_control = false; +- } +- if (tmp_value) ++ if (tmp_value) { ++ if (!strcasecmp((const char *) cur_node->name, "Index")) { ++ cdev->index = atoi(tmp_value); ++ } else if (!strcasecmp((const char *) cur_node->name, "Type")) { ++ cdev->type_string.assign((const char*) tmp_value); ++ string_trim(cdev->type_string); ++ } else if (!strcasecmp((const char *) cur_node->name, "Path")) { ++ cdev->mask |= CDEV_DEF_BIT_PATH; ++ cdev->path_str.assign((const char*) tmp_value); ++ string_trim(cdev->path_str); ++ } else if (!strcasecmp((const char *) cur_node->name, "MinState")) { ++ cdev->mask |= CDEV_DEF_BIT_MIN_STATE; ++ cdev->min_state = atoi(tmp_value); ++ } else if (!strcasecmp((const char *) cur_node->name, "MaxState")) { ++ cdev->mask |= CDEV_DEF_BIT_MAX_STATE; ++ cdev->max_state = atoi(tmp_value); ++ } else if (!strcasecmp((const char *) cur_node->name, ++ "IncDecStep")) { ++ cdev->mask |= CDEV_DEF_BIT_STEP; ++ cdev->inc_dec_step = atoi(tmp_value); ++ } else if (!strcasecmp((const char *) cur_node->name, "ReadBack")) { ++ cdev->mask |= CDEV_DEF_BIT_READ_BACK; ++ cdev->read_back = atoi(tmp_value); ++ } else if (!strcasecmp((const char *) cur_node->name, ++ "DebouncePeriod")) { ++ cdev->mask |= CDEV_DEF_BIT_DEBOUNCE_VAL; ++ cdev->debounce_interval = atoi(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "PidControl")) { ++ cdev->mask |= CDEV_DEF_BIT_PID_PARAMS; ++ cdev->pid_enable = true; ++ parse_pid_values(cur_node->children, doc, &cdev->pid); ++ } else if (!strcasecmp((const char *) cur_node->name, ++ "AutoOffMode")) { ++ cdev->mask |= CDEV_DEF_BIT_AUTO_DOWN; ++ if (atoi(tmp_value)) ++ cdev->auto_down_control = true; ++ else ++ cdev->auto_down_control = false; ++ } + xmlFree(tmp_value); ++ } + } + } + +@@ -381,17 +384,18 @@ int cthd_parse::parse_new_sensor_link(xmlNode * a_node, xmlDoc *doc, + DEBUG_PARSER_PRINT("node type: Element, name: %s value: %s\n", cur_node->name, xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1)); + tmp_value = (char*) xmlNodeListGetString(doc, + cur_node->xmlChildrenNode, 1); +- if (!strcasecmp((const char*) cur_node->name, "SensorType")) { +- info_ptr->name.assign(tmp_value); +- string_trim(info_ptr->name); +- } else if (!strcasecmp((const char*) cur_node->name, +- "Multiplier")) { +- info_ptr->multiplier = atof(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, "Offset")) { +- info_ptr->offset = atof(tmp_value); +- } +- if (tmp_value) ++ if (tmp_value) { ++ if (!strcasecmp((const char*) cur_node->name, "SensorType")) { ++ info_ptr->name.assign(tmp_value); ++ string_trim(info_ptr->name); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "Multiplier")) { ++ info_ptr->multiplier = atof(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, "Offset")) { ++ info_ptr->offset = atof(tmp_value); ++ } + xmlFree(tmp_value); ++ } + } + } + +@@ -408,26 +412,27 @@ int cthd_parse::parse_new_sensor(xmlNode * a_node, xmlDoc *doc, + DEBUG_PARSER_PRINT("node type: Element, name: %s value: %s\n", cur_node->name, xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1)); + tmp_value = (char*) xmlNodeListGetString(doc, + cur_node->xmlChildrenNode, 1); +- if (!strcasecmp((const char*) cur_node->name, "Type")) { +- info_ptr->name.assign(tmp_value); +- string_trim(info_ptr->name); +- } else if (!strcasecmp((const char*) cur_node->name, "Path")) { +- info_ptr->mask |= SENSOR_DEF_BIT_PATH; +- info_ptr->path.assign(tmp_value); +- string_trim(info_ptr->path); +- } else if (!strcasecmp((const char*) cur_node->name, +- "AsyncCapable")) { +- info_ptr->async_capable = atoi(tmp_value); +- info_ptr->mask |= SENSOR_DEF_BIT_ASYNC_CAPABLE; +- } else if (!strcasecmp((const char*) cur_node->name, "Virtual")) { +- info_ptr->virtual_sensor = atoi(tmp_value); +- } else if (!strcasecmp((const char*) cur_node->name, +- "SensorLink")) { +- parse_new_sensor_link(cur_node->children, doc, +- &info_ptr->sensor_link); +- } +- if (tmp_value) ++ if (tmp_value) { ++ if (!strcasecmp((const char*) cur_node->name, "Type")) { ++ info_ptr->name.assign(tmp_value); ++ string_trim(info_ptr->name); ++ } else if (!strcasecmp((const char*) cur_node->name, "Path")) { ++ info_ptr->mask |= SENSOR_DEF_BIT_PATH; ++ info_ptr->path.assign(tmp_value); ++ string_trim(info_ptr->path); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "AsyncCapable")) { ++ info_ptr->async_capable = atoi(tmp_value); ++ info_ptr->mask |= SENSOR_DEF_BIT_ASYNC_CAPABLE; ++ } else if (!strcasecmp((const char*) cur_node->name, "Virtual")) { ++ info_ptr->virtual_sensor = atoi(tmp_value); ++ } else if (!strcasecmp((const char*) cur_node->name, ++ "SensorLink")) { ++ parse_new_sensor_link(cur_node->children, doc, ++ &info_ptr->sensor_link); ++ } + xmlFree(tmp_value); ++ } + } + } + diff --git a/thermald.spec b/thermald.spec index 4f3f9b4..cdc1880 100644 --- a/thermald.spec +++ b/thermald.spec @@ -8,7 +8,7 @@ Name: thermald Version: 1.6 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Thermal Management daemon License: GPLv2+ @@ -21,6 +21,16 @@ Patch1: %{url}/commit/6a2344b4a55acc0cba356d0f7c521c0cdb6632e0.patch#/%{name}-1 Patch2: %{url}/commit/2a00d1745161c6d11b927f025ff1f4bb44f61d15.patch#/%{name}-1.6-load_preference_from_xml_file.patch Patch3: %{url}/commit/37a25879239466f2d096fd1a58b2ac7bbc3958f5.patch#/%{name}-1.6-set_default_preference.patch Patch4: %{url}/commit/35bda2d052b8820cbfce6c1918e3866c6fa3fd76.patch#/%{name}-1.6-update_QCustomPlot_2_0_0_beta.patch +Patch5: %{url}/commit/e311dc88d3acac7eca593efea5d95507b02608da.patch#/%{name}-1.6-remove_duplicate_assignment_to_critical_temp.patch +Patch6: %{url}/commit/7ee77cce542b2ed0421133b01904d5ad0ecdab6f.patch#/%{name}-1.6-thd_parse_check_for_xmlNodeListGetString_NULL_returns.patch +Patch7: %{url}/commit/8f7d49be960dd19edaef452a89b541e4509caef7.patch#/%{name}-1.6-fix_typo_on_field_name_default_prefernce.patch +Patch8: %{url}/commit/18989faac5138213a99f63346e49f4279caad9fb.patch#/%{name}-1.6-dont_terminate_the_thermald_engine_if_thd_engine_is_null.patch +Patch9: %{url}/commit/90169f80a70efd4d5b6101e87666cd355dbd786f.patch#/%{name}-1.6-removed_compile_flags.patch +Patch10: %{url}/commit/9c5d8354dd8efff340a030c05f7beda03061cd0a.patch#/%{name}-1.6-fix_dbus_re-init_accessing_deleted_pointer.patch + +# See: https://bugzilla.redhat.com/show_bug.cgi?id=1464548 +# https://github.com/intel/thermal_daemon/issues/132 +Patch1000: %{name}-1.6-rhbz1464548.patch # No cpuid.h on other arches. ExclusiveArch: %{ix86} x86_64 @@ -265,6 +275,10 @@ fi %changelog +* Fri Jun 30 2017 Björn Esser - 1.6-4 +- Add upstream patch to fix ThermalMonitor (rhbz#1464548) +- Add several fixes from upstream + * Tue Apr 11 2017 Björn Esser - 1.6-3 - Explicitly turn on hardening, if required