aboutsummaryrefslogtreecommitdiff
path: root/tests-m32/ipc_msgbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests-m32/ipc_msgbuf.c')
-rw-r--r--tests-m32/ipc_msgbuf.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/tests-m32/ipc_msgbuf.c b/tests-m32/ipc_msgbuf.c
index d1083899..c4af1bef 100644
--- a/tests-m32/ipc_msgbuf.c
+++ b/tests-m32/ipc_msgbuf.c
@@ -38,11 +38,16 @@
static int msqid = -1;
-static void
+static int
cleanup(void)
{
- msgctl(msqid, IPC_RMID, 0);
- msqid = -1;
+ if (msqid != -1) {
+ int rc = msgctl(msqid, IPC_RMID, 0);
+ msqid = -1;
+ if (rc == -1)
+ return 77;
+ }
+ return 0;
}
int
@@ -59,10 +64,11 @@ main(void)
msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
if (msqid == -1)
perror_msg_and_skip("msgget");
- atexit(cleanup);
+ typedef void (*atexit_func)(void);
+ atexit((atexit_func) cleanup);
if (msgsnd(msqid, &msg, msgsz, 0) == -1)
perror_msg_and_skip("msgsnd");
if (msgrcv(msqid, &msg, msgsz, mtype, 0) != msgsz)
perror_msg_and_skip("msgrcv");
- return 0;
+ return cleanup();
}