allocation limit

crux-00011: $SRC/utils/chk_limit.c

#include "utils/chk_i.h"

static int limit = 1024 * 1024;
static int in_use = 0;
static int ok_to_modify = 1;


void
chk_limit (int l)
{
  if (! ok_to_modify) panic ("modifying allocation limit too late");
  if (l < 0) panic ("malloc limit sub-zero");
  if (l < in_use) panic ("malloc limit fatally lowered");
  limit = l;
  ok_to_modify = 0;
}

void
chk_use (int amt)
{
  ok_to_modify = 0;
  if (!limit) return;
  if ((amt + in_use) < 0) panic ("over or underflow error in allocator");
  if ((amt + in_use) > limit) panic ("memory limit exceeded");
  in_use += amt;
}



/*

    This file is part of Crux.

    Crux 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, either version 3 of the License, or
    (at your option) any later version.

    Crux 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.

    You should have received a copy of the GNU General Public License
    along with Crux.  If not, see <http://www.gnu.org/licenses/>.

*/