[CRIU] [PATCH 12/12] posix-timer: Remove periodic test, test non consequent timer ids
Andrew Vagin
avagin at parallels.com
Thu May 30 01:01:46 EDT 2013
On Thu, May 30, 2013 at 03:36:21AM +0400, Pavel Tikhomirov wrote:
> Explanation of remove periodic test is that we can't set overrun for
> timer, so all checks will fail in case of big overrun before dump.
>
> Add fake timers to inshure that then timer ids don't go one after
> another c/r go well.
zdtm is used for testing OpenVZ cpt, so test cases can be only expanded.
You can use macroses in a code and build another binary file with
reduced functionality.
>
> Signed-off-by: Pavel Tikhomirov <snorcht at gmail.com>
> ---
> test/zdtm/live/static/posix_timers.c | 37 ++++++++++++++++------------------
> 1 file changed, 17 insertions(+), 20 deletions(-)
>
> diff --git a/test/zdtm/live/static/posix_timers.c b/test/zdtm/live/static/posix_timers.c
> index ae9a882..5ee9b87 100644
> --- a/test/zdtm/live/static/posix_timers.c
> +++ b/test/zdtm/live/static/posix_timers.c
> @@ -19,14 +19,10 @@ sigset_t mask;
>
> #define MAX_TIMER_DISPLACEMENT 10
>
> -static void realtime_periodic_handler(int sig, siginfo_t *si, void *uc);
> -static void monotonic_periodic_handler(int sig, siginfo_t *si, void *uc);
> static void realtime_oneshot_handler(int sig, siginfo_t *si, void *uc);
> static void monotonic_oneshot_handler(int sig, siginfo_t *si, void *uc);
>
> enum {
> - REALTIME_PERIODIC_INFO,
> - MONOTONIC_PERIODIC_INFO,
> REALTIME_ONESHOT_INFO,
> MONOTONIC_ONESHOT_INFO,
> };
> @@ -45,10 +41,6 @@ static struct posix_timers_info {
> int overrun;
> struct timespec start, end;
> } posix_timers[] = {
> - [REALTIME_PERIODIC_INFO] = {CLOCK_REALTIME, "REALTIME (periodic)",
> - realtime_periodic_handler, SIGALRM, 0, 1},
> - [MONOTONIC_PERIODIC_INFO] = {CLOCK_MONOTONIC, "MONOTONIC (periodic)",
> - monotonic_periodic_handler, SIGINT, 0, 3},
> [REALTIME_ONESHOT_INFO] = {CLOCK_REALTIME, "REALTIME (oneshot)",
> realtime_oneshot_handler, SIGUSR1, 1, INT_MAX},
> [MONOTONIC_ONESHOT_INFO] = {CLOCK_MONOTONIC, "MONOTONIC (oneshot)",
> @@ -179,24 +171,12 @@ static void generic_handler(struct posix_timers_info *info,
> info->handler_cnt++;
> }
>
> -static void monotonic_periodic_handler(int sig, siginfo_t *si, void *uc)
> -{
> - generic_handler(si->si_value.sival_ptr,
> - &posix_timers[MONOTONIC_PERIODIC_INFO], sig);
> -}
> -
> static void monotonic_oneshot_handler(int sig, siginfo_t *si, void *uc)
> {
> generic_handler(si->si_value.sival_ptr,
> &posix_timers[MONOTONIC_ONESHOT_INFO], sig);
> }
>
> -static void realtime_periodic_handler(int sig, siginfo_t *si, void *uc)
> -{
> - generic_handler(si->si_value.sival_ptr,
> - &posix_timers[REALTIME_PERIODIC_INFO], sig);
> -}
> -
> static void realtime_oneshot_handler(int sig, siginfo_t *si, void *uc)
> {
> generic_handler(si->si_value.sival_ptr,
> @@ -205,6 +185,8 @@ static void realtime_oneshot_handler(int sig, siginfo_t *si, void *uc)
>
> static int setup_timers(void)
> {
> + int i;
> + int ret;
> struct posix_timers_info *info = posix_timers;
> struct sigevent sev;
> struct itimerspec its;
> @@ -222,6 +204,21 @@ static int setup_timers(void)
>
> info = posix_timers;
> while(info->handler) {
> + /* Add and delete fake timers to test restoring 'with holes' */
> + timer_t timeridt;
> + for (i = 0; i < 10; i++) {
> + ret = timer_create(CLOCK_REALTIME, NULL, &timeridt);
> + if (ret < 0) {
> + err("Can't create temporary posix timer %lx\n", (long) timeridt);
> + return -errno;
> + }
> + ret = timer_delete(timeridt);
> + if (ret < 0) {
> + err("Can't remove temporaty posix timer %lx\n", (long) timeridt);
> + return -errno;
> + }
> + }
> +
> info->sa.sa_flags = SA_SIGINFO;
> info->sa.sa_sigaction = info->handler;
> sigemptyset(&info->sa.sa_mask);
> --
> 1.7.9.5
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list