This is an automated email from the git hooks/post-receive script. timystery pushed a commit to branch master in repository panel-plugins/xfce4-sensors-plugin.
commit 18de320c85585fd33ae36e94671364fc72879c2f Author: Fabian <timyst...@arcor.de> Date: Wed Apr 19 16:40:55 2017 +0200 Reworked the nvidia sensors implementation; removed double memory leak therein. Moved define ZERO_KELVIN to central types file instead of individual implementations. --- include/hddtemp.h | 4 +- include/nvidia.h | 4 +- include/types.h | 2 + lib/middlelayer.c | 4 +- lib/nvidia.c | 179 +++++++++++++++++++++++++++--------------------------- 5 files changed, 97 insertions(+), 96 deletions(-) diff --git a/include/hddtemp.h b/include/hddtemp.h index 8214155..a3e42a1 100644 --- a/include/hddtemp.h +++ b/include/hddtemp.h @@ -22,10 +22,12 @@ #ifndef XFCE4_SENSORS_HDDTEMP_H #define XFCE4_SENSORS_HDDTEMP_H +/* Package includes */ +#include <types.h> + /* Gtk/Glib includes */ #include <glib.h> -#define ZERO_KELVIN -273 /*.15 */ #define HDDTEMP_DISK_SLEEPING ZERO_KELVIN /* must be larger than the remaining ones */ #define NO_VALID_HDDTEMP_PROGRAM ZERO_KELVIN-1 /* the calls/communication to hddtemp don't work */ #define NO_VALID_TEMPERATURE_VALUE ZERO_KELVIN-2 /* the value for a single disk is invalid */ diff --git a/include/nvidia.h b/include/nvidia.h index 16030e8..3158c9f 100644 --- a/include/nvidia.h +++ b/include/nvidia.h @@ -33,14 +33,14 @@ * @param chips: Pointer to pointer array to chips * @return number of detected chip features */ -int initialize_nvidia (GPtrArray *chips); +int initialize_nvidia (GPtrArray *arr_ptr_chips); /** * Refresh an nvidia chip's feature * @param chip_feature: Pointer to chip feature to refresh * @param data: currently unused */ -void refresh_nvidia (gpointer chip_feature, gpointer data); +void refresh_nvidia (gpointer ptr_chipfeature, gpointer ptr_unused); /** * Read the temperature value from GPU diff --git a/include/types.h b/include/types.h index b9162ac..60c6962 100644 --- a/include/types.h +++ b/include/types.h @@ -57,6 +57,8 @@ typedef struct sensors_chip_name { #endif +#define ZERO_KELVIN -273 /*.15 */ + /** * temperature scale to show values in */ diff --git a/lib/middlelayer.c b/lib/middlelayer.c index 91ed7c2..0b40cd3 100644 --- a/lib/middlelayer.c +++ b/lib/middlelayer.c @@ -90,10 +90,10 @@ refresh_chip (gpointer ptr_chip, gpointer ptr_data) { t_chip *ptr_chip_structure; - g_assert (ptr_chip != NULL); - TRACE ("enters refresh_chip"); + g_assert (ptr_chip != NULL); + ptr_chip_structure = (t_chip*) ptr_chip; switch (ptr_chip_structure->type) diff --git a/lib/nvidia.c b/lib/nvidia.c index dfeadd4..a8cf50d 100644 --- a/lib/nvidia.c +++ b/lib/nvidia.c @@ -1,4 +1,7 @@ -/* Copyright (c) 2011 Amir Aupov <fad...@gmail.com> +/* File: nvidia.c + * + * Copyright (c) 2011 Amir Aupov <fad...@gmail.com> + * Copyright (c) 2017 Fabian Nowak <timyst...@arcor.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,53 +45,50 @@ Display *nvidia_sensors_display; /* Local functions */ int read_gpus (t_chip *chip); -/* Defines */ -#define ZERO_KELVIN -273 - /* -------------------------------------------------------------------------- */ int -initialize_nvidia (GPtrArray *chips) +initialize_nvidia (GPtrArray *arr_ptr_chips) { int retval; int num_gpus; - t_chip *chip; - t_chipfeature *chipfeature; + t_chip *ptr_chip; + t_chipfeature *ptr_chipfeature; TRACE ("enters initialize_nvidia"); - chip = g_new0 (t_chip, 1); - //chip -> chip_name = g_strdup(_("nvidia")); - chip -> chip_features = g_ptr_array_new (); - chip -> num_features = 0; - chip -> description = g_strdup(_("NVidia GPU core temperature")); - chip -> name = g_strdup(_("nvidia")); - chip -> sensorId = g_strdup("nvidia"); - chip -> type = GPU; - - num_gpus = read_gpus (chip); - if (chip -> num_features > 0) { + g_assert (arr_ptr_chips != NULL); + + ptr_chip = g_new0 (t_chip, 1); + ptr_chip->chip_features = g_ptr_array_new (); + ptr_chip->num_features = 0; + ptr_chip->description = g_strdup(_("NVidia GPU core temperature")); + ptr_chip->name = g_strdup(_("nvidia")); + ptr_chip->sensorId = g_strdup("nvidia"); + ptr_chip->type = GPU; + + num_gpus = read_gpus (ptr_chip); + if (ptr_chip->num_features > 0) { int i; for (i = 0; i < num_gpus; i++) { - chipfeature = g_ptr_array_index (chip -> chip_features, i); - g_assert (chipfeature != NULL); - chipfeature -> address = i; - chipfeature -> name = g_strdup(chipfeature -> devicename); - chipfeature -> color = g_strdup ("#000000"); - chipfeature -> valid = TRUE; - //chipfeature -> formatted_value = g_strdup ("0.0"); - chipfeature -> raw_value = 0.0; - chipfeature -> class = TEMPERATURE; - chipfeature -> min_value = 10.0; - chipfeature -> max_value = 50.0; - chipfeature -> show = FALSE; + ptr_chipfeature = g_ptr_array_index (ptr_chip->chip_features, i); + g_assert (ptr_chipfeature != NULL); + ptr_chipfeature->address = i; + ptr_chipfeature->name = g_strdup(ptr_chipfeature->devicename); + ptr_chipfeature->color = g_strdup ("#000000"); + ptr_chipfeature->valid = TRUE; + ptr_chipfeature->raw_value = 0.0; + ptr_chipfeature->class = TEMPERATURE; + ptr_chipfeature->min_value = 10.0; + ptr_chipfeature->max_value = 70.0; + ptr_chipfeature->show = FALSE; } - g_ptr_array_add (chips, chip); + g_ptr_array_add (arr_ptr_chips, ptr_chip); retval = 2; } else retval = 0; - TRACE ("leaves initialize_nvidia"); + TRACE ("leaves initialize_nvidia with %d.", retval); return retval; } @@ -96,47 +96,43 @@ initialize_nvidia (GPtrArray *chips) /* -------------------------------------------------------------------------- */ double -get_nvidia_value (int gpu) +get_nvidia_value (int idx_gpu) { - int temp; - - TRACE ("enters get_nvidia_value for %d gpu", gpu); - - if (!(XNVCTRLQueryTargetAttribute (nvidia_sensors_display, - NV_CTRL_TARGET_TYPE_GPU, - gpu, - 0, - NV_CTRL_GPU_CORE_TEMPERATURE, - &temp))) { - TRACE ("NVCtrl doesn't work properly"); - return ZERO_KELVIN; + int val_temperature = 0; + double result = ZERO_KELVIN; + + TRACE ("enters get_nvidia_value for GPU %d.", idx_gpu); + + if (XNVCTRLQueryTargetAttribute (nvidia_sensors_display, + NV_CTRL_TARGET_TYPE_GPU, + idx_gpu, + 0, + NV_CTRL_GPU_CORE_TEMPERATURE, + &val_temperature)) { + result = (double) (1.0 * val_temperature); } - TRACE ("leaves get_nvidia_value for %d gpu", gpu); + TRACE ("leaves get_nvidia_value for GPU %d with %f.", idx_gpu, result); - return (double) (1.0 * temp); + return result; } /* -------------------------------------------------------------------------- */ void -refresh_nvidia (gpointer chip_feature, gpointer data) +refresh_nvidia (gpointer ptr_chipfeature, gpointer ptr_unused) { - t_chipfeature *cf; + t_chipfeature *ptr_localchipfeature; double value; - g_assert (chip_feature != NULL); - TRACE ("enters refresh_nvidia"); - cf = (t_chipfeature *) chip_feature; - value = get_nvidia_value (cf -> address); - if (value == ZERO_KELVIN) - return; + ptr_localchipfeature = (t_chipfeature *) ptr_chipfeature; + g_assert (ptr_localchipfeature != NULL); - //g_free (cf -> formatted_value); - //cf -> formatted_value = g_strdup_printf(_("%.1f °C"), value); - cf -> raw_value = value; + value = get_nvidia_value (ptr_localchipfeature->address); + if (value != ZERO_KELVIN) + ptr_localchipfeature->raw_value = value; TRACE ("leaves refresh_nvidia"); } @@ -144,53 +140,54 @@ refresh_nvidia (gpointer chip_feature, gpointer data) /* -------------------------------------------------------------------------- */ int -read_gpus (t_chip *chip) +read_gpus (t_chip *ptr_chip) { - t_chipfeature *chipfeature; - int num_gpus; + t_chipfeature *ptr_chipfeature; + int num_gpus = 0; int event, error; - int i; + int idx_gpu; TRACE ("enters read_gpus"); + g_assert (ptr_chip != NULL); /* create the connection to the X server */ - if (!(nvidia_sensors_display = XOpenDisplay (NULL))) { - TRACE ("failed to connect to X server"); - return 0; - } - - /* check if the NVCtrl is available on this X server - * if so - add sensors*/ - if (!(XNVCTRLQueryExtension (nvidia_sensors_display, - &event, &error))) { - TRACE ("NVCtrl is not available"); - return 0; + nvidia_sensors_display = XOpenDisplay (NULL); + if (nvidia_sensors_display) { + + /* check if the NVCtrl is available on this X server + * if so - add sensors*/ + if (XNVCTRLQueryExtension (nvidia_sensors_display, &event, &error)) { + XNVCTRLQueryTargetCount (nvidia_sensors_display, + NV_CTRL_TARGET_TYPE_GPU, + &num_gpus); + } } - if (!(XNVCTRLQueryTargetCount (nvidia_sensors_display, - NV_CTRL_TARGET_TYPE_GPU, - &num_gpus))) { - TRACE ("No NVidia devices found"); - return 0; - } + for (idx_gpu = 0; idx_gpu < num_gpus; idx_gpu++) { + gchar* ptr_str_gpuname = NULL; /* allocated by libxnvctrl */ + ptr_chipfeature = g_new0 (t_chipfeature, 1); - for (i = 0; i < num_gpus; i++) { - gchar *device_name = (gchar*) malloc (100 * sizeof(gchar)); if (XNVCTRLQueryTargetStringAttribute (nvidia_sensors_display, NV_CTRL_TARGET_TYPE_GPU, - i, + idx_gpu, 0, NV_CTRL_STRING_PRODUCT_NAME, - &device_name)) - TRACE ("GPU%d:%s", i, device_name); - - chipfeature = g_new0 (t_chipfeature, 1); - chipfeature -> devicename = g_strdup (device_name); - chipfeature -> name = g_strdup (device_name); - g_ptr_array_add (chip -> chip_features, chipfeature); - chip -> num_features++; + &ptr_str_gpuname)) { + g_assert (ptr_str_gpuname != NULL); + TRACE ("GPU %d: %s", idx_gpu, ptr_str_gpuname); + ptr_chipfeature->devicename = ptr_str_gpuname; /* "it is the caller's responsibility to free ..." */ + } + else + { + ptr_chipfeature->devicename = g_strdup_printf ("GPU %d", idx_gpu); + } + ptr_chipfeature->name = g_strdup (ptr_chipfeature->devicename); + + g_ptr_array_add (ptr_chip->chip_features, ptr_chipfeature); + ptr_chip->num_features++; } - TRACE ("leaves read_gpus"); + TRACE ("leaves read_gpus with %d.", num_gpus); + return num_gpus; } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits