@@ -58,14 +58,19 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
58
58
}
59
59
60
60
size_t ipcHandleSize = 0 ;
61
- umf_alloc_info_t allocInfo ;
62
- umf_result_t ret = umfMemoryTrackerGetAllocInfo (ptr , & allocInfo );
61
+ umf_memory_properties_handle_t props = NULL ;
62
+ umf_result_t ret = umfGetMemoryPropertiesHandle (ptr , & props );
63
63
if (ret != UMF_RESULT_SUCCESS ) {
64
- LOG_ERR ("cannot get alloc info for ptr = %p." , ptr );
64
+ LOG_ERR ("cannot get alloc props for ptr = %p." , ptr );
65
65
return ret ;
66
66
}
67
67
68
- ret = umfPoolGetIPCHandleSize (allocInfo .pool , & ipcHandleSize );
68
+ if (props == NULL || props -> pool == NULL ) {
69
+ LOG_ERR ("cannot get pool from alloc info for ptr = %p." , ptr );
70
+ return UMF_RESULT_ERROR_UNKNOWN ;
71
+ }
72
+
73
+ ret = umfPoolGetIPCHandleSize (props -> pool , & ipcHandleSize );
69
74
if (ret != UMF_RESULT_SUCCESS ) {
70
75
LOG_ERR ("cannot get IPC handle size." );
71
76
return ret ;
@@ -79,11 +84,14 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
79
84
80
85
// We cannot use umfPoolGetMemoryProvider function because it returns
81
86
// upstream provider but we need tracking one
82
- umf_memory_provider_handle_t provider = allocInfo .pool -> provider ;
83
- assert (provider );
87
+ if (props -> pool -> provider == NULL ) {
88
+ LOG_ERR ("cannot get memory provider from pool" );
89
+ umf_ba_global_free (ipcData );
90
+ return UMF_RESULT_ERROR_UNKNOWN ;
91
+ }
92
+ umf_memory_provider_handle_t provider = props -> pool -> provider ;
84
93
85
- ret = umfMemoryProviderGetIPCHandle (provider , allocInfo .base ,
86
- allocInfo .baseSize ,
94
+ ret = umfMemoryProviderGetIPCHandle (provider , props -> base , props -> base_size ,
87
95
(void * )ipcData -> providerIpcData );
88
96
if (ret != UMF_RESULT_SUCCESS ) {
89
97
LOG_ERR ("failed to get IPC handle." );
@@ -92,10 +100,10 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
92
100
}
93
101
94
102
// ipcData->handle_id is filled by tracking provider
95
- ipcData -> base = allocInfo . base ;
103
+ ipcData -> base = props -> base ;
96
104
ipcData -> pid = utils_getpid ();
97
- ipcData -> baseSize = allocInfo . baseSize ;
98
- ipcData -> offset = (uintptr_t )ptr - (uintptr_t )allocInfo . base ;
105
+ ipcData -> baseSize = props -> base_size ;
106
+ ipcData -> offset = (uintptr_t )ptr - (uintptr_t )props -> base ;
99
107
100
108
* umfIPCHandle = ipcData ;
101
109
* size = ipcHandleSize ;
0 commit comments