X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Funixsock.c;h=0dc7d659400193a8bf29fc0ab3f78a9556826a90;hb=d19bcbf5c310f3656503e64ba26829256112ded4;hp=6de1395662161a66aaacafa389efa1e680583bf9;hpb=83077c18c3e78739c2d2d18debf99875944eaa72;p=collectd.git diff --git a/src/unixsock.c b/src/unixsock.c index 6de13956..0dc7d659 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -26,7 +26,6 @@ #include "utils_cmd_flush.h" #include "utils_cmd_getval.h" -#include "utils_cmd_getthreshold.h" #include "utils_cmd_listval.h" #include "utils_cmd_putval.h" #include "utils_cmd_putnotif.h" @@ -206,6 +205,7 @@ static void *us_handle_client (void *arg) close (fdin); close (fdout); pthread_exit ((void *) 1); + return ((void *) 1); } fhout = fdopen (fdout, "w"); @@ -217,6 +217,7 @@ static void *us_handle_client (void *arg) fclose (fhin); /* this closes fdin as well */ close (fdout); pthread_exit ((void *) 1); + return ((void *) 1); } /* change output buffer to line buffered mode */ @@ -228,6 +229,7 @@ static void *us_handle_client (void *arg) fclose (fhin); fclose (fhout); pthread_exit ((void *) 1); + return ((void *) 0); } while (42) @@ -241,6 +243,9 @@ static void *us_handle_client (void *arg) errno = 0; if (fgets (buffer, sizeof (buffer), fhin) == NULL) { + if ((errno == EINTR) || (errno == EAGAIN)) + continue; + if (errno != 0) { char errbuf[1024]; @@ -269,16 +274,13 @@ static void *us_handle_client (void *arg) fclose (fhin); fclose (fhout); pthread_exit ((void *) 1); + return ((void *) 1); } if (strcasecmp (fields[0], "getval") == 0) { handle_getval (fhout, buffer); } - else if (strcasecmp (fields[0], "getthreshold") == 0) - { - handle_getthreshold (fhout, buffer); - } else if (strcasecmp (fields[0], "putval") == 0) { handle_putval (fhout, buffer); @@ -323,6 +325,9 @@ static void *us_server_thread (void __attribute__((unused)) *arg) pthread_t th; pthread_attr_t th_attr; + pthread_attr_init (&th_attr); + pthread_attr_setdetachstate (&th_attr, PTHREAD_CREATE_DETACHED); + if (us_open_socket () != 0) pthread_exit ((void *) 1); @@ -341,6 +346,7 @@ static void *us_server_thread (void __attribute__((unused)) *arg) sstrerror (errno, errbuf, sizeof (errbuf))); close (sock_fd); sock_fd = -1; + pthread_attr_destroy (&th_attr); pthread_exit ((void *) 1); } @@ -357,9 +363,6 @@ static void *us_server_thread (void __attribute__((unused)) *arg) DEBUG ("Spawning child to handle connection on fd #%i", *remote_fd); - pthread_attr_init (&th_attr); - pthread_attr_setdetachstate (&th_attr, PTHREAD_CREATE_DETACHED); - status = pthread_create (&th, &th_attr, us_handle_client, (void *) remote_fd); if (status != 0) { @@ -374,6 +377,7 @@ static void *us_server_thread (void __attribute__((unused)) *arg) close (sock_fd); sock_fd = -1; + pthread_attr_destroy (&th_attr); status = unlink ((sock_file != NULL) ? sock_file : US_DEFAULT_PATH); if (status != 0)