comparison third_party/libuv/test/test-loop-oom.c @ 160:948de3f54cea

[ThirdParty] Added libuv
author June Park <parkjune1995@gmail.com>
date Wed, 14 Jan 2026 19:39:52 -0800
parents
children
comparison
equal deleted inserted replaced
159:05cf9467a1c3 160:948de3f54cea
1 /* Copyright libuv contributors. All rights reserved.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to
5 * deal in the Software without restriction, including without limitation the
6 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 * sell copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19 * IN THE SOFTWARE.
20 */
21
22 #include "uv.h"
23 #include "task.h"
24 #include <stdlib.h>
25 #include <string.h>
26
27 static int limit;
28 static int alloc;
29
30 static void* t_realloc(void* p, size_t n) {
31 alloc += n;
32 if (alloc > limit)
33 return NULL;
34 p = realloc(p, n);
35 ASSERT_NOT_NULL(p);
36 return p;
37 }
38
39 static void* t_calloc(size_t m, size_t n) {
40 return t_realloc(NULL, m * n);
41 }
42
43 static void* t_malloc(size_t n) {
44 return t_realloc(NULL, n);
45 }
46
47 TEST_IMPL(loop_init_oom) {
48 uv_loop_t loop;
49 int err;
50
51 ASSERT_OK(uv_replace_allocator(t_malloc, t_realloc, t_calloc, free));
52 for (;;) {
53 err = uv_loop_init(&loop);
54 if (err == 0)
55 break;
56 ASSERT_EQ(err, UV_ENOMEM);
57 limit += 8;
58 alloc = 0;
59 }
60 ASSERT_OK(uv_loop_close(&loop));
61 return 0;
62 }