@@ -1153,6 +1153,8 @@ typedef struct os_ipc_data_t {
1153
1153
int fd ;
1154
1154
size_t fd_offset ;
1155
1155
size_t size ;
1156
+ unsigned protection ; // combination of OS-specific protection flags
1157
+ unsigned visibility ; // memory visibility mode
1156
1158
// shm_name is a Flexible Array Member because it is optional and its size
1157
1159
// varies on the Shared Memory object name
1158
1160
size_t shm_name_len ;
@@ -1200,6 +1202,8 @@ static umf_result_t os_get_ipc_handle(void *provider, const void *ptr,
1200
1202
os_ipc_data -> pid = utils_getpid ();
1201
1203
os_ipc_data -> fd_offset = (size_t )value - 1 ;
1202
1204
os_ipc_data -> size = size ;
1205
+ os_ipc_data -> protection = os_provider -> protection ;
1206
+ os_ipc_data -> visibility = os_provider -> visibility ;
1203
1207
os_ipc_data -> shm_name_len = strlen (os_provider -> shm_name );
1204
1208
if (os_ipc_data -> shm_name_len > 0 ) {
1205
1209
strncpy (os_ipc_data -> shm_name , os_provider -> shm_name ,
@@ -1278,8 +1282,8 @@ static umf_result_t os_open_ipc_handle(void *provider, void *providerIpcData,
1278
1282
}
1279
1283
}
1280
1284
1281
- * ptr = utils_mmap (NULL , os_ipc_data -> size , os_provider -> protection ,
1282
- os_provider -> visibility , fd , os_ipc_data -> fd_offset );
1285
+ * ptr = utils_mmap (NULL , os_ipc_data -> size , os_ipc_data -> protection ,
1286
+ os_ipc_data -> visibility , fd , os_ipc_data -> fd_offset );
1283
1287
if (* ptr == NULL ) {
1284
1288
os_store_last_native_error (UMF_OS_RESULT_ERROR_ALLOC_FAILED , errno );
1285
1289
LOG_PERR ("memory mapping failed" );
0 commit comments