forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmalloc.cpp
More file actions
119 lines (93 loc) · 2.11 KB
/
Copy pathmalloc.cpp
File metadata and controls
119 lines (93 loc) · 2.11 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//-------------------------------------------------------------------------------------------------------
// ChakraCore/Pal
// Contains portions (c) copyright Microsoft, portions copyright (c) the .NET Foundation and Contributors
// and edits (c) copyright the ChakraCore Contributors.
// See THIRD-PARTY-NOTICES.txt in the project root for .NET Foundation license
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
/*++
Module Name:
malloc.cpp
Abstract:
Implementation of suspension safe memory allocation functions.
Revision History:
--*/
#include "pal/corunix.hpp"
#include "pal/thread.hpp"
#include "pal/malloc.hpp"
#include "pal/dbgmsg.h"
#include <string.h>
SET_DEFAULT_DEBUG_CHANNEL(CRT);
using namespace CorUnix;
void *
__cdecl
PAL_realloc(
void* pvMemblock,
size_t szSize
)
{
return InternalRealloc(pvMemblock, szSize);
}
void *
CorUnix::InternalRealloc(
void* pvMemblock,
size_t szSize
)
{
void *pvMem;
PERF_ENTRY(InternalRealloc);
ENTRY("realloc (memblock:%p size=%d)\n", pvMemblock, szSize);
if (szSize == 0)
{
// If pvMemblock is NULL, there's no reason to call free.
if (pvMemblock != NULL)
{
InternalFree(pvMemblock);
}
pvMem = NULL;
}
else
{
pvMem = realloc(pvMemblock, szSize);
}
LOGEXIT("realloc returns void * %p\n", pvMem);
PERF_EXIT(InternalRealloc);
return pvMem;
}
void
__cdecl
PAL_free(
void *pvMem
)
{
InternalFree(pvMem);
}
void
CorUnix::InternalFree(
void *pvMem
)
{
free(pvMem);
}
void *
__cdecl
PAL_malloc(
size_t szSize
)
{
return InternalMalloc(szSize);
}
void *
CorUnix::InternalMalloc(
size_t szSize
)
{
void *pvMem;
if (szSize == 0)
{
// malloc may return null for a requested size of zero bytes. Force a nonzero size to get a valid pointer.
szSize = 1;
}
pvMem = (void*)malloc(szSize);
return pvMem;
}