LCOV - code coverage report
Current view: top level - basic - ratelimit.c (source / functions) Hit Total Coverage
Test: systemd test coverage Lines: 15 15 100.0 %
Date: 2015-07-29 18:47:03 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
       2             : 
       3             : /***
       4             :   This file is part of systemd.
       5             : 
       6             :   Copyright 2010 Lennart Poettering
       7             : 
       8             :   systemd is free software; you can redistribute it and/or modify it
       9             :   under the terms of the GNU Lesser General Public License as published by
      10             :   the Free Software Foundation; either version 2.1 of the License, or
      11             :   (at your option) any later version.
      12             : 
      13             :   systemd is distributed in the hope that it will be useful, but
      14             :   WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
      16             :   Lesser General Public License for more details.
      17             : 
      18             :   You should have received a copy of the GNU Lesser General Public License
      19             :   along with systemd; If not, see <http://www.gnu.org/licenses/>.
      20             : ***/
      21             : 
      22             : 
      23             : #include "ratelimit.h"
      24             : 
      25             : /* Modelled after Linux' lib/ratelimit.c by Dave Young
      26             :  * <hidave.darkstar@gmail.com>, which is licensed GPLv2. */
      27             : 
      28       10027 : bool ratelimit_test(RateLimit *r) {
      29             :         usec_t ts;
      30             : 
      31       10027 :         assert(r);
      32             : 
      33       10027 :         if (r->interval <= 0 || r->burst <= 0)
      34       10006 :                 return true;
      35             : 
      36          21 :         ts = now(CLOCK_MONOTONIC);
      37             : 
      38          41 :         if (r->begin <= 0 ||
      39          20 :             r->begin + r->interval < ts) {
      40           2 :                 r->begin = ts;
      41             : 
      42             :                 /* Reset counter */
      43           2 :                 r->num = 0;
      44           2 :                 goto good;
      45             :         }
      46             : 
      47          19 :         if (r->num < r->burst)
      48          18 :                 goto good;
      49             : 
      50           1 :         return false;
      51             : 
      52             : good:
      53          20 :         r->num++;
      54          20 :         return true;
      55             : }

Generated by: LCOV version 1.11