X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgmond.c;h=4660713b4cbcc6f5d7887a70c9b16963f0c3dc3d;hb=939f4098d43c2934a9a97e076d64a7504613b872;hp=3c746c48887c3e678d42e2417b3d11bd38a7b1ec;hpb=d6021a800b12c89b5a78877af2c5b9abc1a8e609;p=collectd.git diff --git a/src/gmond.c b/src/gmond.c index 3c746c48..4660713b 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -2,18 +2,23 @@ * collectd - src/gmond.c * Copyright (C) 2009,2010 Florian octo Forster * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; only version 2 of the License is applicable. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * Authors: * Florian octo Forster @@ -78,12 +83,12 @@ typedef struct staging_entry_s staging_entry_t; struct metric_map_s { - char *ganglia_name; - char *type; - char *type_instance; - char *ds_name; - int ds_type; - int ds_index; + char *ganglia_name; + char *type; + char *type_instance; + char *ds_name; + int ds_type; + size_t ds_index; }; typedef struct metric_map_s metric_map_t; @@ -161,7 +166,7 @@ static metric_map_t *metric_lookup (const char *key) /* {{{ */ return (NULL); /* Look up the DS type and ds_index. */ - if ((map[i].ds_type < 0) || (map[i].ds_index < 0)) /* {{{ */ + if (map[i].ds_type < 0) /* {{{ */ { const data_set_t *ds; @@ -186,7 +191,7 @@ static metric_map_t *metric_lookup (const char *key) /* {{{ */ } else { - int j; + size_t j; for (j = 0; j < ds->ds_num; j++) if (strcasecmp (ds->ds[j].name, map[i].ds_name) == 0) @@ -217,13 +222,13 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ 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; - - 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; @@ -355,8 +360,11 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ freeaddrinfo (ai_list); - if ((*ret_sockets_num) >= sockets_num) + if (sockets_num == 0) + { + sfree (sockets); return (-1); + } *ret_sockets = sockets; *ret_sockets_num = sockets_num; @@ -503,7 +511,7 @@ static int staging_entry_submit (const char *host, const char *name, /* {{{ */ static int staging_entry_update (const char *host, const char *name, /* {{{ */ const char *type, const char *type_instance, - int ds_index, int ds_type, value_t value) + size_t ds_index, int ds_type, value_t value) { const data_set_t *ds; staging_entry_t *se; @@ -517,7 +525,7 @@ static int staging_entry_update (const char *host, const char *name, /* {{{ */ if (ds->ds_num <= ds_index) { - ERROR ("gmond plugin: Invalid index %i: %s has only %i data source(s).", + ERROR ("gmond plugin: Invalid index %zu: %s has only %zu data source(s).", ds_index, ds->type, ds->ds_num); return (-1); } @@ -660,7 +668,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_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; @@ -867,6 +875,7 @@ static void *mc_receive_thread (void *arg) /* {{{ */ } } /* while (mc_receive_thread_loop != 0) */ + free (mc_receive_socket_entries); return ((void *) 0); } /* }}} void *mc_receive_thread */ @@ -879,7 +888,7 @@ static int mc_receive_thread_start (void) /* {{{ */ mc_receive_thread_loop = 1; - status = pthread_create (&mc_receive_thread_id, /* attr = */ NULL, + status = plugin_thread_create (&mc_receive_thread_id, /* attr = */ NULL, mc_receive_thread, /* args = */ NULL); if (status != 0) {