- /* Attempt to delete the existing shared-memory region, then
- recreate it. */
- shmctl (shmget (3925, 4096, flags), IPC_RMID, NULL);
- if ((shmid = shmget (3925, 4096, flags | IPC_EXCL)) < 0)
- {
- printf ("Cannot create shared-memory region.\n");
- return 1;
- }
+ shmid = shmget (shmkey, 4096, flags | IPC_EXCL);
+ if (shmid >= 0)
+ break;
+
+ ++shmkey;
+ }
+
+ if (shmid < 0)
+ {
+ printf ("Cannot create shared-memory region after %d tries.\n", retries);
+ return 1;
+ }
+
+ for (try = 0; try < retries; ++try)
+ {
+ semid = semget (semkey, 1, flags | IPC_EXCL);
+ if (semid >= 0)
+ break;
+
+ ++semkey;
+ }
+
+ if (semid < 0)
+ {
+ printf ("Cannot create semaphore after %d tries.\n", retries);
+ return 1;
+ }
+
+ for (try = 0; try < retries; ++try)
+ {
+ msqid = msgget (msgkey, flags | IPC_EXCL);
+ if (msqid >= 0)
+ break;
+
+ ++msgkey;
+ }
+
+ if (msqid < 0)
+ {
+ printf ("Cannot create message queue after %d tries.\n", retries);
+ return 1;