projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gmond plugin: Check return value of sendto(2).
[collectd.git]
/
src
/
gmond.c
diff --git
a/src/gmond.c
b/src/gmond.c
index
3c746c4
..
629a9ad
100644
(file)
--- a/
src/gmond.c
+++ b/
src/gmond.c
@@
-217,13
+217,13
@@
static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */
struct addrinfo *ai_ptr;
int ai_return;
struct addrinfo *ai_ptr;
int ai_return;
- socket_entry_t *sockets;
- size_t sockets_num;
+ socket_entry_t *sockets
= NULL
;
+ size_t sockets_num
= 0
;
int status;
int status;
-
- sockets = *ret_sockets;
-
sockets_num = *ret_sockets_num
;
+
+ if (*ret_sockets != NULL)
+
return (EINVAL)
;
memset (&ai_hints, 0, sizeof (ai_hints));
ai_hints.ai_flags = 0;
memset (&ai_hints, 0, sizeof (ai_hints));
ai_hints.ai_flags = 0;
@@
-286,8
+286,14
@@
static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */
{
int yes = 1;
{
int yes = 1;
- setsockopt (sockets[sockets_num].fd, SOL_SOCKET, SO_REUSEADDR,
+ s
tatus = s
etsockopt (sockets[sockets_num].fd, SOL_SOCKET, SO_REUSEADDR,
(void *) &yes, sizeof (yes));
(void *) &yes, sizeof (yes));
+ if (status != 0)
+ {
+ char errbuf[1024];
+ WARNING ("gmond plugin: setsockopt(2) failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ }
}
status = bind (sockets[sockets_num].fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen);
}
status = bind (sockets[sockets_num].fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen);
@@
-355,8
+361,11
@@
static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */
freeaddrinfo (ai_list);
freeaddrinfo (ai_list);
- if ((*ret_sockets_num) >= sockets_num)
+ if (sockets_num == 0)
+ {
+ sfree (sockets);
return (-1);
return (-1);
+ }
*ret_sockets = sockets;
*ret_sockets_num = sockets_num;
*ret_sockets = sockets;
*ret_sockets_num = sockets_num;
@@
-402,10
+411,19
@@
static int request_meta_data (const char *host, const char *name) /* {{{ */
pthread_mutex_lock (&mc_send_sockets_lock);
for (i = 0; i < mc_send_sockets_num; i++)
pthread_mutex_lock (&mc_send_sockets_lock);
for (i = 0; i < mc_send_sockets_num; i++)
- sendto (mc_send_sockets[i].fd, buffer, (size_t) buffer_size,
+ {
+ ssize_t status = sendto (mc_send_sockets[i].fd, buffer, (size_t) buffer_size,
/* flags = */ 0,
(struct sockaddr *) &mc_send_sockets[i].addr,
mc_send_sockets[i].addrlen);
/* flags = */ 0,
(struct sockaddr *) &mc_send_sockets[i].addr,
mc_send_sockets[i].addrlen);
+ if (status == -1)
+ {
+ char errbuf[1024];
+ ERROR ("gmond plugin: sendto(2) failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ continue;
+ }
+ }
pthread_mutex_unlock (&mc_send_sockets_lock);
sfree (msg.Ganglia_metadata_msg_u.grequest.metric_id.host);
pthread_mutex_unlock (&mc_send_sockets_lock);
sfree (msg.Ganglia_metadata_msg_u.grequest.metric_id.host);
@@
-660,7
+678,7
@@
static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */
if ((map->ds_type == DS_TYPE_COUNTER)
|| (map->ds_type == DS_TYPE_ABSOLUTE))
val_copy = value_counter;
if ((map->ds_type == DS_TYPE_COUNTER)
|| (map->ds_type == DS_TYPE_ABSOLUTE))
val_copy = value_counter;
- if (map->ds_type == DS_TYPE_GAUGE)
+
else
if (map->ds_type == DS_TYPE_GAUGE)
val_copy = value_gauge;
else if (map->ds_type == DS_TYPE_DERIVE)
val_copy = value_derive;
val_copy = value_gauge;
else if (map->ds_type == DS_TYPE_DERIVE)
val_copy = value_derive;
@@
-867,6
+885,7
@@
static void *mc_receive_thread (void *arg) /* {{{ */
}
} /* while (mc_receive_thread_loop != 0) */
}
} /* while (mc_receive_thread_loop != 0) */
+ free (mc_receive_socket_entries);
return ((void *) 0);
} /* }}} void *mc_receive_thread */
return ((void *) 0);
} /* }}} void *mc_receive_thread */
@@
-879,7
+898,7
@@
static int mc_receive_thread_start (void) /* {{{ */
mc_receive_thread_loop = 1;
mc_receive_thread_loop = 1;
- status = pthread_create (&mc_receive_thread_id, /* attr = */ NULL,
+ status = p
lugin_
thread_create (&mc_receive_thread_id, /* attr = */ NULL,
mc_receive_thread, /* args = */ NULL);
if (status != 0)
{
mc_receive_thread, /* args = */ NULL);
if (status != 0)
{