src/librrdc.c: When sending an `update', wait for the reply before closing the socket.
authorFlorian Forster <octo@verplant.org>
Sat, 21 Jun 2008 16:17:07 +0000 (18:17 +0200)
committerFlorian Forster <octo@verplant.org>
Sat, 21 Jun 2008 16:17:07 +0000 (18:17 +0200)
Not doing so will (still!) crash rrdd, but it's not nice either hence this fix.

src/librrdc.c

index 25d0afa..1a21260 100644 (file)
@@ -22,8 +22,6 @@
 #include "rrdd.h"
 #include "rrdc.h"
 
-#define SOCK_TEMPLATE "/tmp/rrdc.sock.XXXXXX"
-
 static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
 static int sd;
 static FILE *sh;
@@ -155,14 +153,29 @@ int rrdd_update (const char *filename, int values_num,
   if (sh == NULL)
   {
     pthread_mutex_unlock (&lock);
-    return (-1);
+    return (ENOTCONN);
   }
 
   status = write (sd, buffer, sizeof (buffer) - buffer_size);
 
+  status = read (sd, buffer, sizeof (buffer));
+  if (status < 0)
+  {
+    status = errno;
+    pthread_mutex_unlock (&lock);
+    return (status);
+  }
+  else if (status == 0)
+  {
+    pthread_mutex_unlock (&lock);
+    return (ENODATA);
+  }
+
+  status = atoi (buffer);
+
   pthread_mutex_unlock (&lock);
 
-  return (0);
+  return (status);
 } /* int rrd_update_daemon */
 
 /*