X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgmond.c;h=2ac9f2501c390e09b3a0f9783fb3078ec0c2fae4;hb=0a63e4493d92f7d739a1849bc65d4e971b047004;hp=629a9ad2409b5982ddf265956abebef2464ea446;hpb=1c639d74e12ae6da05f93596478429c389246b4e;p=collectd.git diff --git a/src/gmond.c b/src/gmond.c index 629a9ad2..2ac9f250 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -1,19 +1,24 @@ /** * collectd - src/gmond.c - * Copyright (C) 2009,2010 Florian octo Forster + * Copyright (C) 2009-2015 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 @@ -489,36 +494,6 @@ static staging_entry_t *staging_entry_get (const char *host, /* {{{ */ return (se); } /* }}} staging_entry_t *staging_entry_get */ -static int staging_entry_submit (const char *host, const char *name, /* {{{ */ - staging_entry_t *se) -{ - value_list_t vl; - value_t values[se->vl.values_len]; - - if (se->vl.interval == 0) - { - /* No meta data has been received for this metric yet. */ - se->flags = 0; - pthread_mutex_unlock (&staging_lock); - request_meta_data (host, name); - return (0); - } - - se->flags = 0; - - memcpy (values, se->vl.values, sizeof (values)); - memcpy (&vl, &se->vl, sizeof (vl)); - - /* Unlock before calling `plugin_dispatch_values'.. */ - pthread_mutex_unlock (&staging_lock); - - vl.values = values; - - plugin_dispatch_values (&vl); - - return (0); -} /* }}} int staging_entry_submit */ - 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) @@ -568,17 +543,30 @@ static int staging_entry_update (const char *host, const char *name, /* {{{ */ se->flags |= (0x01 << ds_index); - /* Check if all values have been set and submit if so. */ - if (se->flags == ((0x01 << se->vl.values_len) - 1)) + /* Check if all data sources have been set. If not, return here. */ + if (se->flags != ((0x01 << se->vl.values_len) - 1)) { - /* `staging_lock' is unlocked in `staging_entry_submit'. */ - staging_entry_submit (host, name, se); + pthread_mutex_unlock (&staging_lock); + return (0); } - else + + /* Check if the interval of this metric is known. If not, request meta data + * and return. */ + if (se->vl.interval == 0) { + /* No meta data has been received for this metric yet. */ + se->flags = 0; pthread_mutex_unlock (&staging_lock); + + request_meta_data (host, name); + return (0); } + plugin_dispatch_values (&se->vl); + + se->flags = 0; + pthread_mutex_unlock (&staging_lock); + return (0); } /* }}} int staging_entry_update */