From 92c2f3306f6e0be348a3cb51cb33e9cdfa37fc17 Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sun, 24 Jul 2016 14:12:37 +0300 Subject: [PATCH] Revert "onewire_parser: Keep server handle open at all time" This was not a very good workaround after all. It appears that on some versions of ownet the client code leaks sockets even if it reuses the server connection all the time. No point in having workaround like this. This reverts commit caedc46c0bfa22e0f8bdfd31132083383ca43994. --- onewire_parser.c | 48 ++++++++++-------------------------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/onewire_parser.c b/onewire_parser.c index 9f4b404..eb2ccd2 100644 --- a/onewire_parser.c +++ b/onewire_parser.c @@ -1,7 +1,6 @@ #include #include -#include "process.h" #include "parser.h" #include "debug.h" #include "string.h" @@ -9,11 +8,6 @@ #include "plugin.h" #include "version.h" -static struct mutex server_lock = { - .name = "server_addr_lock", - .lock = PTHREAD_MUTEX_INITIALIZER, -}; - static int parse_opts(const char *str, char *ow_path, size_t pathlen, double *offset) { char *endptr; @@ -81,8 +75,8 @@ static int make_uncached(char *path, size_t len) static int onewire_parser(char *rrd_data, const char **parser_data) { - static OWNET_HANDLE handle; - static char *server_addr; + OWNET_HANDLE h; + const char *server_addr; char buf[24], *tmp; int i = 1, ret; int max_str = RRD_DATA_MAX_LEN; @@ -92,36 +86,16 @@ static int onewire_parser(char *rrd_data, const char **parser_data) return -1; } - if (!parser_data[0]) { + server_addr = parser_data[0]; + + if (!server_addr) { pr_err("Server address not specified\n"); return -1; } - /* - * No point trying to connect to the server more than - * once. Also we don't know how thread safe libownet is. One - * lock to protect it all. - */ - mutex_lock(&server_lock); - /* - * Keep one server connection alive at all times. This - * prevents file descriptor leak with older libownet. - */ - if (!server_addr || handle < 0) { - if (server_addr) - free(server_addr); - server_addr = strdup(parser_data[0]); - handle = OWNET_init(server_addr); - } else if (strcmp(server_addr, parser_data[0])) { - OWNET_close(handle); - free(server_addr); - server_addr = strdup(parser_data[0]); - handle = OWNET_init(server_addr); - } - - if (handle < 0) { + h = OWNET_init(server_addr); + if (h < 0) { pr_err("Failed to connect to server %s\n", server_addr); - mutex_unlock(&server_lock); return -1; } @@ -147,9 +121,8 @@ undefined: pr_info("Reading data for entry %s with offset of %.2f\n", ow_path, offset); - ret = OWNET_read(handle, ow_path, &tmp); - if (ret < 0) - goto err; + ret = OWNET_read(h, ow_path, &tmp); + /* Skip leading white space */ tmp2 = tmp; for (j = 0; j < ret && *tmp2 == ' '; j++) @@ -169,7 +142,6 @@ undefined: break; ret = make_uncached(ow_path, sizeof(ow_path)); -err: if (retries >= 10 || ret < 0) { pr_err("Failed to read entry %s: %m\n", parser_data[i]); @@ -207,7 +179,7 @@ next: } rrd_data = 0; - mutex_unlock(&server_lock); + OWNET_finish(); return 0; } -- 2.44.0