diff --git a/src/gps.c b/src/gps.c
index e43af4a4e55b2256af5846f81c3f0a8d9f157ef4..b5294228800e86efa784b1b34fdc255c631d0d62 100644 (file)
--- a/src/gps.c
+++ b/src/gps.c
#include "common.h"
#include "plugin.h"
#include "utils_time.h"
-#include "configfile.h"
#define CGPS_TRUE 1
#define CGPS_FALSE 0
static pthread_t cgps_thread_id;
static pthread_mutex_t cgps_data_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t cgps_thread_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t cgps_thread_cond = PTHREAD_COND_INITIALIZER;
static int cgps_thread_shutdown = CGPS_FALSE;
static int cgps_thread_running = CGPS_FALSE;
*/
static int cgps_thread_pause(cdtime_t pTime)
{
- cdtime_t now;
- now = cdtime ();
- struct timespec pause_th;
- CDTIME_T_TO_TIMESPEC (MS_TO_CDTIME_T(10), &pause_th);
- while (CGPS_TRUE)
- {
- if ( (cdtime () - now) > pTime )
- {
- break;
- }
+ cdtime_t until = cdtime() + pTime;
- pthread_mutex_lock (&cgps_thread_lock);
- if (cgps_thread_shutdown == CGPS_TRUE)
- {
- return CGPS_FALSE;
- }
- pthread_mutex_unlock (&cgps_thread_lock);
- nanosleep (&pause_th, NULL);
- }
+ pthread_mutex_lock (&cgps_thread_lock);
+ pthread_cond_timedwait (&cgps_thread_cond, &cgps_thread_lock,
+ &CDTIME_T_TO_TIMESPEC (until));
+
+ int ret = !cgps_thread_shutdown;
- return CGPS_TRUE;
+ pthread_mutex_lock (&cgps_thread_lock);
+ return ret;
}
/**
*/
static void cgps_submit (const char *type, gauge_t value, const char *type_instance)
{
- value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- values[0].gauge = value;
-
- vl.values = values;
+ vl.values = &(value_t) { .gauge = value };
vl.values_len = 1;
- sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "gps", sizeof (vl.plugin));
sstrncpy (vl.type, type, sizeof (vl.type));
sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
@@ -239,7 +224,7 @@ static void cgps_submit (const char *type, gauge_t value, const char *type_insta
/**
* Read the data and submit by piece.
*/
-static int cgps_read ()
+static int cgps_read (void)
{
cgps_data_t data_copy;
cgps_config_data.timeout > TIME_T_TO_CDTIME_T(5)
||
cgps_config_data.timeout < US_TO_CDTIME_T(500)
- )
+ )
{
- WARNING ("gps plugin: timeout set to %.6f sec. setting to default (%.6f).",
+ WARNING ("gps plugin: timeout set to %.6f sec. setting to default (%.6f).",
CDTIME_T_TO_DOUBLE(cgps_config_data.timeout),
CDTIME_T_TO_DOUBLE(CGPS_DEFAULT_TIMEOUT)
);
cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT;
- }
+ }
return (0);
}
pthread_mutex_lock (&cgps_thread_lock);
cgps_thread_shutdown = CGPS_TRUE;
+ pthread_cond_broadcast (&cgps_thread_cond);
pthread_mutex_unlock (&cgps_thread_lock);
pthread_join(cgps_thread_id, &res);