@@ -25,6 +25,13 @@ typedef struct umf_memory_provider_t {
25
25
void * provider_priv ;
26
26
} umf_memory_provider_t ;
27
27
28
+ static umf_result_t umfDefaultFree (void * provider , void * ptr , size_t size ) {
29
+ (void )provider ;
30
+ (void )ptr ;
31
+ (void )size ;
32
+ return UMF_RESULT_ERROR_NOT_SUPPORTED ;
33
+ }
34
+
28
35
static umf_result_t umfDefaultPurgeLazy (void * provider , void * ptr ,
29
36
size_t size ) {
30
37
(void )provider ;
@@ -99,6 +106,9 @@ static umf_result_t umfDefaultCloseIPCHandle(void *provider, void *ptr,
99
106
}
100
107
101
108
void assignOpsExtDefaults (umf_memory_provider_ops_t * ops ) {
109
+ if (!ops -> ext .free ) {
110
+ ops -> ext .free = umfDefaultFree ;
111
+ }
102
112
if (!ops -> ext .purge_lazy ) {
103
113
ops -> ext .purge_lazy = umfDefaultPurgeLazy ;
104
114
}
@@ -133,7 +143,7 @@ void assignOpsIpcDefaults(umf_memory_provider_ops_t *ops) {
133
143
134
144
static bool validateOpsMandatory (const umf_memory_provider_ops_t * ops ) {
135
145
// Mandatory ops should be non-NULL
136
- return ops -> alloc && ops -> free && ops -> get_recommended_page_size &&
146
+ return ops -> alloc && ops -> get_recommended_page_size &&
137
147
ops -> get_min_page_size && ops -> initialize && ops -> finalize &&
138
148
ops -> get_last_native_error && ops -> get_name ;
139
149
}
@@ -219,7 +229,8 @@ umf_result_t umfMemoryProviderAlloc(umf_memory_provider_handle_t hProvider,
219
229
umf_result_t umfMemoryProviderFree (umf_memory_provider_handle_t hProvider ,
220
230
void * ptr , size_t size ) {
221
231
UMF_CHECK ((hProvider != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
222
- umf_result_t res = hProvider -> ops .free (hProvider -> provider_priv , ptr , size );
232
+ umf_result_t res =
233
+ hProvider -> ops .ext .free (hProvider -> provider_priv , ptr , size );
223
234
checkErrorAndSetLastProvider (res , hProvider );
224
235
return res ;
225
236
}
0 commit comments