summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-utilities/oom-test/files/oom-test.c
blob: 90363a4b2609ddd39e67551beeda62869f03d0ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
// Copyright (c) 2021 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Abstract:   oom test application
//
*/

#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>

void Usage(char* progname)
{
    printf("Usage:\n");
    printf("%s -s <size>\n", progname);
    printf("Options:\n");
    printf("\t%-12s%s\n", "-h", "Display this help information");
    printf("\t%-12s%s\n", "-s <size>",
           "Allocation unit size for getting heap in infinite loop");
    printf("\n");
}

int main(int argc, char** argv)
{
    int c, i, unitSize = 0, allocSize = 0;

    while (-1 != (c = getopt(argc, argv, "h:s:")))
    {
        switch (c)
        {
            case 'h':
                Usage(argv[0]);
                return 0;

            case 's':
                if (optarg != NULL)
                {
                    unitSize = (int)strtoul(optarg, NULL, 0);
                }
                break;

            default:
                Usage(argv[0]);
                return 1;
        }
    }

    if (!unitSize)
    {
        printf("Error: Invalid allocation unit size\n");
        Usage(argv[0]);
        return 1;
    }

    while (1)
    {
        char* buf = (char*)malloc(unitSize);
        if (!buf)
        {
            printf("Can't allocate memory!\n");
            exit(0);
        }

        printf("Filling allocated memory...\n");
        for (i = 0; i < unitSize; i++)
            buf[i] = 1;

        printf("Allocated %d MB\n", (++allocSize * 10));

        /* continue looping without freeing to make OOM condition */
    }

    return 0;
}