@@ -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,11 @@ 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
+ // IPC API requires params->visibility == UMF_MEM_MAP_SHARED
1160
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1161
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1162
+ }
1155
1163
1156
1164
if (os_provider -> shm_name [0 ]) {
1157
1165
// os_ipc_data_t->shm_name will be used
@@ -1171,7 +1179,9 @@ static umf_result_t os_get_ipc_handle(void *provider, const void *ptr,
1171
1179
}
1172
1180
1173
1181
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1174
- if (os_provider -> fd <= 0 ) {
1182
+ if (!os_provider -> IPC_enabled ) {
1183
+ // IPC API requires params->visibility == UMF_MEM_MAP_SHARED
1184
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1175
1185
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1176
1186
}
1177
1187
@@ -1203,6 +1213,12 @@ static umf_result_t os_put_ipc_handle(void *provider, void *providerIpcData) {
1203
1213
}
1204
1214
1205
1215
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1216
+ if (!os_provider -> IPC_enabled ) {
1217
+ // IPC API requires params->visibility == UMF_MEM_MAP_SHARED
1218
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1219
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1220
+ }
1221
+
1206
1222
os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
1207
1223
1208
1224
if (os_ipc_data -> pid != utils_getpid ()) {
@@ -1229,6 +1245,12 @@ static umf_result_t os_open_ipc_handle(void *provider, void *providerIpcData,
1229
1245
}
1230
1246
1231
1247
os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1248
+ if (!os_provider -> IPC_enabled ) {
1249
+ // IPC API requires params->visibility == UMF_MEM_MAP_SHARED
1250
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1251
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1252
+ }
1253
+
1232
1254
os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
1233
1255
umf_result_t ret = UMF_RESULT_SUCCESS ;
1234
1256
int fd ;
@@ -1269,6 +1291,13 @@ static umf_result_t os_close_ipc_handle(void *provider, void *ptr,
1269
1291
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1270
1292
}
1271
1293
1294
+ os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1295
+ if (!os_provider -> IPC_enabled ) {
1296
+ // IPC API requires params->visibility == UMF_MEM_MAP_SHARED
1297
+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1298
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1299
+ }
1300
+
1272
1301
errno = 0 ;
1273
1302
int ret = utils_munmap (ptr , size );
1274
1303
// ignore error when size == 0
0 commit comments