Merge pull request #1308 from mfournier/openldap-persistent-connection
[collectd.git] / src / write_graphite.c
index bb4b284..0b8ab41 100644 (file)
@@ -96,33 +96,33 @@ struct wg_callback
     cdtime_t last_connect_time;
 
     /* Force reconnect useful for load balanced environments */
-    cdtime_t last_force_reconnect_time;
-    cdtime_t force_reconnect_timeout;
-    _Bool conn_forced_closed;
+    cdtime_t last_reconnect_time;
+    cdtime_t reconnect_interval;
+    _Bool reconnect_interval_reached;
 };
 
 /* wg_force_reconnect_check closes cb->sock_fd when it was open for longer
- * than cb->force_reconnect_timeout. Must hold cb->send_lock when calling. */
+ * than cb->reconnect_interval. Must hold cb->send_lock when calling. */
 static void wg_force_reconnect_check (struct wg_callback *cb)
 {
     cdtime_t now;
 
-    if (cb->force_reconnect_timeout == 0)
+    if (cb->reconnect_interval == 0)
         return;
 
     /* check if address changes if addr_timeout */
     now = cdtime ();
-    if ((now - cb->last_force_reconnect_time) < cb->force_reconnect_timeout)
+    if ((now - cb->last_reconnect_time) < cb->reconnect_interval)
         return;
 
     /* here we should close connection on next */
     close (cb->sock_fd);
     cb->sock_fd = -1;
-    cb->last_force_reconnect_time = now;
-    cb->conn_forced_closed = 1;
+    cb->last_reconnect_time = now;
+    cb->reconnect_interval_reached = 1;
 
     INFO ("write_graphite plugin: Connection closed after %.3f seconds.",
-          CDTIME_T_TO_DOUBLE (now - cb->last_force_reconnect_time));
+          CDTIME_T_TO_DOUBLE (now - cb->last_reconnect_time));
 }
 
 /*
@@ -141,7 +141,7 @@ static int wg_send_buffer (struct wg_callback *cb)
     ssize_t status = 0;
 
     status = swrite (cb->sock_fd, cb->send_buf, strlen (cb->send_buf));
-    if (status < 0)
+    if (status != 0)
     {
         if (cb->log_send_errors)
         {
@@ -180,7 +180,7 @@ static int wg_flush_nolock (cdtime_t timeout, struct wg_callback *cb)
             return (0);
     }
 
-    if (cb->send_buf_fill <= 0)
+    if (cb->send_buf_fill == 0)
     {
         cb->send_buf_init_time = cdtime ();
         return (0);
@@ -280,11 +280,11 @@ static int wg_callback_init (struct wg_callback *cb)
 
     /* wg_force_reconnect_check does not flush the buffer before closing a
      * sending socket, so only call wg_reset_buffer() if the socket was closed
-     * for a different reason (tracked in cb->conn_forced_closed). */
-    if (!cb->conn_forced_closed || (cb->send_buf_free == 0))
+     * for a different reason (tracked in cb->reconnect_interval_reached). */
+    if (!cb->reconnect_interval_reached || (cb->send_buf_free == 0))
         wg_reset_buffer (cb);
     else
-        cb->conn_forced_closed = 0;
+        cb->reconnect_interval_reached = 0;
 
     return (0);
 }
@@ -486,21 +486,20 @@ static int wg_config_node (oconfig_item_t *ci)
     int i;
     int status = 0;
 
-    cb = malloc (sizeof (*cb));
+    cb = calloc (1, sizeof (*cb));
     if (cb == NULL)
     {
-        ERROR ("write_graphite plugin: malloc failed.");
+        ERROR ("write_graphite plugin: calloc failed.");
         return (-1);
     }
-    memset (cb, 0, sizeof (*cb));
     cb->sock_fd = -1;
     cb->name = NULL;
     cb->node = strdup (WG_DEFAULT_NODE);
     cb->service = strdup (WG_DEFAULT_SERVICE);
     cb->protocol = strdup (WG_DEFAULT_PROTOCOL);
-    cb->last_force_reconnect_time = cdtime();
-    cb->force_reconnect_timeout = 0;
-    cb->conn_forced_closed = 0;
+    cb->last_reconnect_time = cdtime();
+    cb->reconnect_interval = 0;
+    cb->reconnect_interval_reached = 0;
     cb->log_send_errors = WG_DEFAULT_LOG_SEND_ERRORS;
     cb->prefix = NULL;
     cb->postfix = NULL;
@@ -541,8 +540,8 @@ static int wg_config_node (oconfig_item_t *ci)
                 status = -1;
             }
         }
-        else if (strcasecmp ("ForceReconnectTimeout", child->key) == 0)
-            cf_util_get_cdtime (child, &cb->force_reconnect_timeout);
+        else if (strcasecmp ("ReconnectInterval", child->key) == 0)
+            cf_util_get_cdtime (child, &cb->reconnect_interval);
         else if (strcasecmp ("LogSendErrors", child->key) == 0)
             cf_util_get_boolean (child, &cb->log_send_errors);
         else if (strcasecmp ("Prefix", child->key) == 0)