Code

collectdctl command hangs on AIX and returns error 0 on Solaris.
[collectd.git] / src / utils_cmd_flush.c
index 0e7b350f581f02f07ccaf234c1ec0c225011b33d..c35aeb04c1b67b01f3a0cd857795f5944e1b1d44 100644 (file)
@@ -32,7 +32,8 @@
                WARNING ("handle_flush: failed to write to socket #%i: %s", \
                                fileno (fh), sstrerror (errno, errbuf, sizeof (errbuf))); \
                return -1; \
-       }
+       } \
+       fflush(fh);
 
 static int add_to_array (char ***array, int *array_num, char *value)
 {
@@ -54,7 +55,7 @@ int handle_flush (FILE *fh, char *buffer)
        int success = 0;
        int error   = 0;
 
-       int timeout = -1;
+       double timeout = 0.0;
        char **plugins = NULL;
        int plugins_num = 0;
        char **identifiers = NULL;
@@ -106,9 +107,9 @@ int handle_flush (FILE *fh, char *buffer)
                        
                        errno = 0;
                        endptr = NULL;
-                       timeout = strtol (opt_value, &endptr, 0);
+                       timeout = strtod (opt_value, &endptr);
 
-                       if ((endptr == opt_value) || (errno != 0))
+                       if ((endptr == opt_value) || (errno != 0) || (!isfinite (timeout)))
                        {
                                print_to_socket (fh, "-1 Invalid value for option `timeout': "
                                                "%s\n", opt_value);
@@ -116,8 +117,10 @@ int handle_flush (FILE *fh, char *buffer)
                                sfree (identifiers);
                                return (-1);
                        }
-                       else if (timeout <= 0)
-                               timeout = -1;
+                       else if (timeout < 0.0)
+                       {
+                               timeout = 0.0;
+                       }
                }
                else
                {
@@ -149,7 +152,9 @@ int handle_flush (FILE *fh, char *buffer)
                        int status;
 
                        identifier = identifiers[j];
-                       status = plugin_flush (plugin, timeout, identifier);
+                       status = plugin_flush (plugin,
+                                       DOUBLE_TO_CDTIME_T (timeout),
+                                       identifier);
                        if (status == 0)
                                success++;
                        else