Fix segfault in ccurl_thread.c
[monky] / src / conky.c
index bf372c3..0154056 100644 (file)
@@ -70,6 +70,9 @@
 #ifdef XOAP
 #include <libxml/parser.h>
 #endif /* XOAP */
+#ifdef HAVE_CURL
+#include <curl/curl.h>
+#endif
 
 /* local headers */
 #include "core.h"
@@ -2300,7 +2303,7 @@ void generate_text_internal(char *p, int p_max_size,
                        }
 #ifdef NVIDIA
                        OBJ(nvidia) {
-                               print_nvidia_value(obj, display, p, p_max_size);
+                               print_nvidia_value(obj, p, p_max_size);
                        }
 #endif /* NVIDIA */
 #ifdef APCUPSD
@@ -2380,9 +2383,10 @@ void generate_text_internal(char *p, int p_max_size,
 #ifdef HAVE_ICONV
                        iconv_convert(&a, buff_in, p, p_max_size);
 #endif /* HAVE_ICONV */
-                       if (obj->type != OBJ_text && obj->type != OBJ_execp && obj->type != OBJ_execpi
+                       if (obj->type == OBJ_execp || obj->type == OBJ_execpi || obj->type
+                                       == OBJ_exec
 #ifdef HAVE_LUA
-                                       && obj->type != OBJ_lua && obj->type != OBJ_lua_parse
+                                       || obj->type == OBJ_lua || obj->type == OBJ_lua_parse
 #endif /* HAVE_LUA */
                                        ) {
                                substitute_newlines(p, a - 2);
@@ -3993,7 +3997,8 @@ static void reload_config(void)
 }
 
 #ifdef X11
-void clean_up_x11() {
+void clean_up_x11(void)
+{
        if(window_created == 1) {
                XClearArea(display, window.window, text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width,
                        text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width,
@@ -4053,6 +4058,9 @@ void clean_up_without_threads(void *memtofree1, void* memtofree2) {
                font_count = -1;
        }
 
+#ifdef NVIDIA
+       set_nvidia_display(NULL);
+#endif
 #endif /* X11 */
 
        free_templates();
@@ -4600,6 +4608,12 @@ char load_config_file(const char *f)
                                disp = strdup(value);
                        }
                }
+#ifdef NVIDIA
+               CONF("nvidia_display") {
+                       if(value)
+                               set_nvidia_display(value);
+               }
+#endif
                CONF("alignment") {
                        setalignment(&text_alignment, window.type, value, f, line, 1);
                }
@@ -5883,6 +5897,11 @@ int main(int argc, char **argv)
        tcp_portmon_set_max_connections(0);
 #endif
 
+#ifdef HAVE_CURL
+       if(curl_global_init(CURL_GLOBAL_ALL))
+               NORM_ERR("curl_global_init() failed, you may not be able to use curl variables");
+#endif
+
        /* handle command line parameters that don't change configs */
 #ifdef X11
        if (((s = getenv("LC_ALL")) && *s) || ((s = getenv("LC_CTYPE")) && *s)
@@ -5974,6 +5993,10 @@ int main(int argc, char **argv)
 
        main_loop();
 
+#ifdef HAVE_CURL
+       curl_global_cleanup();
+#endif
+
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        kvm_close(kd);
 #endif