mqtt, gps: add name parameter to plugin_thread_create()
[collectd.git] / src / gps.c
index d5b7176..81056e3 100644 (file)
--- a/src/gps.c
+++ b/src/gps.c
@@ -64,6 +64,7 @@ static cgps_data_t cgps_data = {NAN, NAN, NAN, NAN};
 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;
 
@@ -72,27 +73,16 @@ 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;
 }
 
 /**
@@ -224,7 +214,6 @@ static void cgps_submit (const char *type, gauge_t value, const char *type_insta
 
   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));
@@ -311,7 +300,7 @@ static int cgps_init (void)
          CDTIME_T_TO_DOUBLE (cgps_config_data.timeout),
          CDTIME_T_TO_DOUBLE (cgps_config_data.pause_connect));
 
-  status = plugin_thread_create (&cgps_thread_id, NULL, cgps_thread, NULL);
+  status = plugin_thread_create (&cgps_thread_id, NULL, cgps_thread, NULL, "gps");
   if (status != 0)
   {
     ERROR ("gps plugin: pthread_create() failed.");
@@ -330,6 +319,7 @@ static int cgps_shutdown (void)
 
   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);