@@ -25,6 +25,13 @@ typedef struct umf_memory_provider_t {
2525 void * provider_priv ;
2626} umf_memory_provider_t ;
2727
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+
2835static umf_result_t umfDefaultPurgeLazy (void * provider , void * ptr ,
2936 size_t size ) {
3037 (void )provider ;
@@ -99,6 +106,9 @@ static umf_result_t umfDefaultCloseIPCHandle(void *provider, void *ptr,
99106}
100107
101108void assignOpsExtDefaults (umf_memory_provider_ops_t * ops ) {
109+ if (!ops -> ext .free ) {
110+ ops -> ext .free = umfDefaultFree ;
111+ }
102112 if (!ops -> ext .purge_lazy ) {
103113 ops -> ext .purge_lazy = umfDefaultPurgeLazy ;
104114 }
@@ -133,7 +143,7 @@ void assignOpsIpcDefaults(umf_memory_provider_ops_t *ops) {
133143
134144static bool validateOpsMandatory (const umf_memory_provider_ops_t * ops ) {
135145 // 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 &&
137147 ops -> get_min_page_size && ops -> initialize && ops -> finalize &&
138148 ops -> get_last_native_error && ops -> get_name ;
139149}
@@ -159,6 +169,10 @@ static bool validateOps(const umf_memory_provider_ops_t *ops) {
159169 validateOpsIpc (& (ops -> ipc ));
160170}
161171
172+ bool umfIsFreeOpDefault (umf_memory_provider_handle_t hProvider ) {
173+ return (hProvider -> ops .ext .free == umfDefaultFree );
174+ }
175+
162176umf_result_t umfMemoryProviderCreate (const umf_memory_provider_ops_t * ops ,
163177 void * params ,
164178 umf_memory_provider_handle_t * hProvider ) {
@@ -219,7 +233,8 @@ umf_result_t umfMemoryProviderAlloc(umf_memory_provider_handle_t hProvider,
219233umf_result_t umfMemoryProviderFree (umf_memory_provider_handle_t hProvider ,
220234 void * ptr , size_t size ) {
221235 UMF_CHECK ((hProvider != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
222- umf_result_t res = hProvider -> ops .free (hProvider -> provider_priv , ptr , size );
236+ umf_result_t res =
237+ hProvider -> ops .ext .free (hProvider -> provider_priv , ptr , size );
223238 checkErrorAndSetLastProvider (res , hProvider );
224239 return res ;
225240}
0 commit comments