summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/info-os.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.base/info-os.c')
-rw-r--r--gdb/testsuite/gdb.base/info-os.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/gdb/testsuite/gdb.base/info-os.c b/gdb/testsuite/gdb.base/info-os.c
index ae2606a359d..8ceaaff4268 100644
--- a/gdb/testsuite/gdb.base/info-os.c
+++ b/gdb/testsuite/gdb.base/info-os.c
@@ -26,6 +26,22 @@
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+/* System V IPC identifiers. */
+static int shmid = -1, semid = -1, msqid = -1;
+
+/* Delete any System V IPC resources that were allocated. */
+
+static void
+ipc_cleanup (void)
+{
+ if (shmid >= 0)
+ shmctl (shmid, IPC_RMID, NULL);
+ if (semid >= 0)
+ semctl (semid, 0, IPC_RMID, NULL);
+ if (msqid >= 0)
+ msgctl (msqid, IPC_RMID, NULL);
+}
+
void *
thread_proc (void *args)
{
@@ -38,7 +54,6 @@ main (void)
{
const int flags = IPC_CREAT | 0666;
key_t shmkey = 3925, semkey = 7428, msgkey = 5294;
- int shmid, semid, msqid;
FILE *fd;
pthread_t thread;
struct sockaddr_in sock_addr;
@@ -47,6 +62,8 @@ main (void)
socklen_t size;
int status, try, retries = 1000;
+ atexit (ipc_cleanup);
+
for (try = 0; try < retries; ++try)
{
shmid = shmget (shmkey, 4096, flags | IPC_EXCL);
@@ -135,9 +152,6 @@ main (void)
/* Set breakpoint here. */
- shmctl (shmid, IPC_RMID, NULL);
- semctl (semid, 0, IPC_RMID, NULL);
- msgctl (msqid, IPC_RMID, NULL);
fclose (fd);
close (sock);