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