main(int argc, char *argv[])
{
int rate = 16;
+ int size = 1;
int leaked;
for (;;) {
int c, option_index = 0;
static struct option long_options[] = {
{ "rate", required_argument, NULL, 'r' },
+ { "size", optional_argument, NULL, 's' },
{ "help", no_argument, NULL, 'h' },
{ 0, 0, 0, 0 }
};
- c = getopt_long(argc, argv, "r:h", long_options, &option_index);
+ c = getopt_long(argc, argv, "r:h:s", long_options, &option_index);
if (c == -1)
break;
case 'r':
rate = atoi(optarg);
break;
+ case 's':
+ size = atoi(optarg);
+ break;
case 'h':
default:
fprintf(stderr, "Usage: %s [OPTION]...\n", argv[0]);
fprintf(stderr, "\t-r, --rate=MiB/sec\tRate to leak memory in MiB/sec\n");
+ fprintf(stderr, "\t-s, --size=MiB\tGrow to size and wait.\n");
return 0;
}
}
for (;;) {
int i, bufsize = rate * 1024 * 1024;
char *buf = malloc(bufsize);
- if (buf) {
+ if (buf && (leaked <= size)) {
/* Touch every page in the buffer */
for (i = 0; i < bufsize; i += 4096)
buf[i] = 1;