Skip to content

Commit 1401a59

Browse files
committed
x
1 parent 0faa086 commit 1401a59

File tree

5 files changed

+42
-10
lines changed

5 files changed

+42
-10
lines changed

src/memory_pool.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ umf_result_t umfPoolByPtr(const void *ptr, umf_memory_pool_handle_t *pool) {
296296
umf_memory_properties_handle_t props = NULL;
297297
umf_result_t ret = umfGetMemoryPropertiesHandle(ptr, &props);
298298
if (ret != UMF_RESULT_SUCCESS || props == NULL || props->pool == NULL) {
299+
*pool = NULL;
299300
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
300301
}
301302

src/memory_props.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,40 @@
1717
#include "memory_provider_internal.h"
1818
#include "provider/provider_tracking.h"
1919

20+
// TODO flag - IPC?
2021
umf_result_t
2122
umfGetMemoryPropertiesHandle(const void *ptr,
2223
umf_memory_properties_handle_t *props_handle) {
2324

24-
LOG_DEBUG("umfGetMemoryPropertiesHandle: ptr=%p, props_handle=%p", ptr,
25-
props_handle);
25+
//LOG_DEBUG("umfGetMemoryPropertiesHandle: ptr=%p, props_handle=%p", ptr,
26+
// props_handle);
2627

2728
if (props_handle == NULL) {
2829
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
2930
}
3031

3132
tracker_alloc_info_t *info = NULL;
3233
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &info);
33-
if (ret != UMF_RESULT_SUCCESS) {
34-
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
34+
35+
if (ret == UMF_RESULT_SUCCESS) {
36+
*props_handle = &info->props;
37+
//LOG_DEBUG("umfGetMemoryPropertiesHandle: props_handle=%p, id=%" PRIu64,
38+
// *props_handle, (*props_handle)->id);
39+
return UMF_RESULT_SUCCESS;
3540
}
3641

37-
*props_handle = &info->props;
42+
// try to get IPC info
43+
umf_ipc_info_t ipc_info;
44+
ret = umfMemoryTrackerGetIpcInfo(ptr, &ipc_info);
45+
if (ret != UMF_RESULT_SUCCESS) {
46+
LOG_ERR("Failed to get memory properties handle for ptr=%p", ptr);
47+
return ret;
48+
}
3849

39-
LOG_DEBUG("umfGetMemoryPropertiesHandle: props_handle=%p, id=%" PRIu64,
40-
*props_handle, (*props_handle)->id);
50+
*props_handle = ipc_info.props;
51+
//LOG_DEBUG(
52+
// "umfGetMemoryPropertiesHandle (IPC info): props_handle=%p, id=%" PRIu64,
53+
// *props_handle, (*props_handle)->id);
4154

4255
return UMF_RESULT_SUCCESS;
4356
}
@@ -46,20 +59,24 @@ umf_result_t umfGetMemoryProperty(umf_memory_properties_handle_t props_handle,
4659
umf_memory_property_id_t memory_property_id,
4760
size_t max_property_size, void *value) {
4861

62+
/*
4963
LOG_DEBUG("umfGetMemoryProperty: props_handle=%p, memory_property_id=%d, "
5064
"max_property_size=%zu, value=%p",
5165
props_handle, memory_property_id, max_property_size, value);
66+
*/
5267

5368
if ((value == NULL) || (props_handle == NULL) || (max_property_size == 0)) {
5469
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
5570
}
5671

5772
umf_memory_provider_t *provider = props_handle->provider;
5873

74+
/*
5975
LOG_DEBUG("umfGetMemoryProperty: provider=%p", provider);
6076
LOG_DEBUG("dereferencing value...");
6177
6278
LOG_DEBUG("value: %zu", *(size_t *)value);
79+
*/
6380

6481
switch (memory_property_id) {
6582
case UMF_MEMORY_PROPERTY_INVALID:

src/pool/pool_disjoint.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -898,16 +898,17 @@ umf_result_t disjoint_pool_malloc_usable_size(void *pool, const void *ptr,
898898
umf_memory_properties_handle_t props = NULL;
899899
umf_result_t umf_result = umfGetMemoryPropertiesHandle(ptr, &props);
900900
if (umf_result != UMF_RESULT_SUCCESS) {
901-
return 0;
901+
return umf_result;
902902
}
903903

904904
if (props == NULL) {
905905
TLS_last_allocation_error = UMF_RESULT_ERROR_UNKNOWN;
906906
LOG_ERR("failed to get allocation info from the memory tracker");
907-
return 0;
907+
return UMF_RESULT_ERROR_UNKNOWN;
908908
}
909909

910-
return props->base_size;
910+
*size = props->base_size;
911+
return UMF_RESULT_SUCCESS;
911912
}
912913

913914
// Get the unaligned pointer

src/provider/provider_tracking.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ struct umf_memory_tracker_t {
4747
};
4848

4949
typedef struct tracker_ipc_info_t {
50+
umf_memory_properties_t props;
5051
size_t size;
5152
umf_memory_provider_handle_t provider;
5253
ipc_opened_cache_value_t *ipc_cache_value;
@@ -410,6 +411,14 @@ umfMemoryTrackerAddIpcSegment(umf_memory_tracker_handle_t hTracker,
410411
value->provider = provider;
411412
value->ipc_cache_value = cache_entry;
412413

414+
memset(&value->props, 0, sizeof(umf_memory_properties_t));
415+
value->props.id = utils_atomic_increment_u64(&unique_alloc_id);
416+
value->props.base = (void *)ptr;
417+
value->props.base_size = size;
418+
value->props.provider = provider;
419+
value->props.ptr = (void *)ptr;
420+
value->props.pool = NULL; // TODO
421+
413422
int ret =
414423
critnib_insert(hTracker->ipc_segments_map, (uintptr_t)ptr, value, 0);
415424
if (ret == 0) {
@@ -593,6 +602,8 @@ umf_result_t umfMemoryTrackerGetIpcInfo(const void *ptr,
593602
pIpcInfo->baseSize = rvalue->size;
594603
pIpcInfo->provider = rvalue->provider;
595604

605+
pIpcInfo->props = &rvalue->props;
606+
596607
if (ref_value) {
597608
critnib_release(TRACKER->ipc_segments_map, ref_value);
598609
}

src/provider/provider_tracking.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
5050
tracker_alloc_info_t **info);
5151

5252
typedef struct umf_ipc_info_t {
53+
umf_memory_properties_handle_t props;
54+
5355
void *base;
5456
size_t baseSize;
5557
umf_memory_provider_handle_t provider;

0 commit comments

Comments
 (0)