From: Cyril Hrubis <chrubis@suse.cz>
To: chenguanxi11234@163.com
Cc: yang.guang5@zte.com.cn, ltp@lists.linux.it,
Chen Haonan <chen.haonan2@zte.com.cn>
Subject: Re: [LTP] [PATCH] posix/conformance/interfaces/sem_timedwait/2-1: Fix test
Date: Tue, 9 Jan 2024 13:00:00 +0100 [thread overview]
Message-ID: <ZZ01QNfFCkSZR2Fr@yuki> (raw)
In-Reply-To: <ebf6297f90def1cac9f2d6202941b343c361c5a6.1704703396.git.chen.haonan2@zte.com.cn>
Hi!
> +/* Modifications by: Chen Haonan <chen.haonan2@zte.com.cn>
> + * Date: 2024-01-08
> + *
> + * Since the parent and child processes are not operating on
> + * the same semaphore, this code wasn't doing its job correctly
> + * before, so we mapped the semaphore to a piece of shared
> + * memory and changed some implementation details in the
> + * original code to make it work.
> + */
Please do not duplicate the commit message in the actual code.
> +#include <stdlib.h>
> #include <stdio.h>
> #include <errno.h>
> #include <unistd.h>
> #include <semaphore.h>
> #include <sys/stat.h>
> #include <sys/wait.h>
> +#include <sys/mman.h>
> #include <fcntl.h>
> #include <signal.h>
> #include <time.h>
> @@ -28,12 +39,16 @@
>
> int main(void)
> {
> - sem_t mysemp;
> + sem_t *mysemp;
> struct timespec ts;
> int pid;
>
> - /* Semaphore started out locked */
> - if (sem_init(&mysemp, 0, 0) == -1) {
> + /* Map semaphore to shared memory */
> + int shm_fd = shm_open("/myshm", O_CREAT | O_RDWR, 0666);
> _
> + ftruncate(shm_fd, sizeof(sem_t));
> + mysemp = (sem_t *)mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
We do not have to have a shm object for a shared memory between a parent
and a child process, for that we can just map anonymous shared memory.
> + if (sem_init(mysemp, 1, 0) == -1) {
> perror(ERROR_PREFIX "sem_init");
> return PTS_UNRESOLVED;
> }
> @@ -43,20 +58,22 @@ int main(void)
> {
> ts.tv_sec = time(NULL) + 2;
> ts.tv_nsec = 0;
> -
> - if (sem_timedwait(&mysemp, &ts) == -1) {
> + if (sem_timedwait(mysemp, &ts) == -1) {
> puts("TEST FAILED");
> + sem_destroy(mysemp);
> + munmap(mysemp, sizeof(sem_t));
> + close(shm_fd);
> + shm_unlink("/myshm");
> return PTS_FAIL;
> } else {
> - puts("TEST PASSED");
> - sem_destroy(&mysemp);
> + puts("TEST PASSED");
> return PTS_PASS;
> }
> } else if (pid > 0) // parent to unlock semaphore
> {
> int i;
> sleep(1);
> - if (sem_post(&mysemp) == -1) {
> + if (sem_post(mysemp) == -1) {
> perror(ERROR_PREFIX "sem_post");
> return PTS_FAIL;
> }
> @@ -64,12 +81,14 @@ int main(void)
> perror("Error waiting for child to exit");
> return PTS_UNRESOLVED;
> }
> -
> - if (!WEXITSTATUS(i)) {
> + if (WEXITSTATUS(i)) {
> return PTS_FAIL;
> }
> puts("TEST PASSED");
> - sem_destroy(&mysemp);
> + sem_destroy(mysemp);
> + munmap(mysemp, sizeof(sem_t));
> + close(shm_fd);
> + shm_unlink("/myshm");
> return PTS_PASS;
> }
> return PTS_UNRESOLVED;
> --
> 2.25.1
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
prev parent reply other threads:[~2024-01-09 11:59 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-08 13:50 [LTP] [PATCH] posix/conformance/interfaces/sem_timedwait/2-1: Fix test chenguanxi11234
2024-01-09 12:00 ` Cyril Hrubis [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZZ01QNfFCkSZR2Fr@yuki \
--to=chrubis@suse.cz \
--cc=chen.haonan2@zte.com.cn \
--cc=chenguanxi11234@163.com \
--cc=ltp@lists.linux.it \
--cc=yang.guang5@zte.com.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.