@@ -402,6 +402,9 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
402
402
return result ;
403
403
}
404
404
405
+ // IPC API requires in_params->visibility == UMF_MEM_MAP_SHARED
406
+ provider -> IPC_enabled = (in_params -> visibility == UMF_MEM_MAP_SHARED );
407
+
405
408
// NUMA config
406
409
int emptyNodeset = in_params -> numa_list_len == 0 ;
407
410
result = validate_numa_mode (in_params -> numa_mode , emptyNodeset );
@@ -1089,7 +1092,7 @@ static umf_result_t os_allocation_split(void *provider, void *ptr,
1089
1092
(void )totalSize ;
1090
1093
1091
1094
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1092
- if (os_provider -> fd <= 0 ) {
1095
+ if (os_provider -> fd < 0 ) {
1093
1096
return UMF_RESULT_SUCCESS ;
1094
1097
}
1095
1098
@@ -1122,7 +1125,7 @@ static umf_result_t os_allocation_merge(void *provider, void *lowPtr,
1122
1125
(void )totalSize ;
1123
1126
1124
1127
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1125
- if (os_provider -> fd <= 0 ) {
1128
+ if (os_provider -> fd < 0 ) {
1126
1129
return UMF_RESULT_SUCCESS ;
1127
1130
}
1128
1131
@@ -1152,6 +1155,10 @@ static umf_result_t os_get_ipc_handle_size(void *provider, size_t *size) {
1152
1155
}
1153
1156
1154
1157
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1158
+ if (!os_provider -> IPC_enabled ) {
1159
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1160
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1161
+ }
1155
1162
1156
1163
if (os_provider -> shm_name [0 ]) {
1157
1164
// os_ipc_data_t->shm_name will be used
@@ -1171,7 +1178,8 @@ static umf_result_t os_get_ipc_handle(void *provider, const void *ptr,
1171
1178
}
1172
1179
1173
1180
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1174
- if (os_provider -> fd <= 0 ) {
1181
+ if (!os_provider -> IPC_enabled ) {
1182
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1175
1183
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1176
1184
}
1177
1185
@@ -1203,6 +1211,11 @@ static umf_result_t os_put_ipc_handle(void *provider, void *providerIpcData) {
1203
1211
}
1204
1212
1205
1213
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1214
+ if (!os_provider -> IPC_enabled ) {
1215
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1216
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1217
+ }
1218
+
1206
1219
os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
1207
1220
1208
1221
if (os_ipc_data -> pid != utils_getpid ()) {
@@ -1229,6 +1242,11 @@ static umf_result_t os_open_ipc_handle(void *provider, void *providerIpcData,
1229
1242
}
1230
1243
1231
1244
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1245
+ if (!os_provider -> IPC_enabled ) {
1246
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1247
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1248
+ }
1249
+
1232
1250
os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
1233
1251
umf_result_t ret = UMF_RESULT_SUCCESS ;
1234
1252
int fd ;
@@ -1269,6 +1287,12 @@ static umf_result_t os_close_ipc_handle(void *provider, void *ptr,
1269
1287
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1270
1288
}
1271
1289
1290
+ os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1291
+ if (!os_provider -> IPC_enabled ) {
1292
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1293
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1294
+ }
1295
+
1272
1296
errno = 0 ;
1273
1297
int ret = utils_munmap (ptr , size );
1274
1298
// ignore error when size == 0
0 commit comments