@@ -615,14 +615,16 @@ TSRM_API int shmget(key_t key, size_t size, int flags)
615
615
{/*{{{*/
616
616
shm_pair * shm ;
617
617
char shm_segment [26 ], shm_info [29 ];
618
- HANDLE shm_handle , info_handle ;
618
+ HANDLE shm_handle = NULL , info_handle = NULL ;
619
619
BOOL created = FALSE;
620
620
621
- snprintf (shm_segment , sizeof (shm_segment ), "TSRM_SHM_SEGMENT:%d" , key );
622
- snprintf (shm_info , sizeof (shm_info ), "TSRM_SHM_DESCRIPTOR:%d" , key );
621
+ if (key != IPC_PRIVATE ) {
622
+ snprintf (shm_segment , sizeof (shm_segment ), "TSRM_SHM_SEGMENT:%d" , key );
623
+ snprintf (shm_info , sizeof (shm_info ), "TSRM_SHM_DESCRIPTOR:%d" , key );
623
624
624
- shm_handle = OpenFileMapping (FILE_MAP_ALL_ACCESS , FALSE, shm_segment );
625
- info_handle = OpenFileMapping (FILE_MAP_ALL_ACCESS , FALSE, shm_info );
625
+ shm_handle = OpenFileMapping (FILE_MAP_ALL_ACCESS , FALSE, shm_segment );
626
+ info_handle = OpenFileMapping (FILE_MAP_ALL_ACCESS , FALSE, shm_info );
627
+ }
626
628
627
629
if (!shm_handle && !info_handle ) {
628
630
if (flags & IPC_CREAT ) {
@@ -633,8 +635,8 @@ TSRM_API int shmget(key_t key, size_t size, int flags)
633
635
DWORD high = 0 ;
634
636
DWORD low = size ;
635
637
#endif
636
- shm_handle = CreateFileMapping (INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , high , low , shm_segment );
637
- info_handle = CreateFileMapping (INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , 0 , sizeof (shm -> descriptor ), shm_info );
638
+ shm_handle = CreateFileMapping (INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , high , low , key == IPC_PRIVATE ? NULL : shm_segment );
639
+ info_handle = CreateFileMapping (INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , 0 , sizeof (shm -> descriptor ), key == IPC_PRIVATE ? NULL : shm_info );
638
640
created = TRUE;
639
641
}
640
642
if (!shm_handle || !info_handle ) {
0 commit comments