Skip to main content
Topic: SOLVED: at-3.2.4-1.1 doesn't work as expected (Read 379 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

SOLVED: at-3.2.4-1.1 doesn't work as expected

EDIT: seems this is a bug in the at-3.2.4 changes see the upstream bug

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1004972

and will probably be fixed in at-3.2.5

Anyone else having trouble with the at package?

If I update to at-3.2.4-1.1, restart at and test an at command I find the command doesn't execute at the specified time. Instead it executes when another at command is entered.

If I revert to at-3.2.2-1.1 and restart then commands execute at the expected time.

I see the same behaviour in archlinux x86_64, armtix aarch64 & manjaro aarch64.

I used strace to look at what the two versions do at the expected time; it looks like at-3.2.4-1.1 gets a wakeup at the expected time, but doesn't seem to execute the child process as is done in at-3.2.2-1.1, but I am not an expert.

at-3.2.2 expected time is 11:21:00
Code: [Select]
11:20:02 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=1495, si_uid=1000} ---
11:20:02 rt_sigreturn({mask=[]})        = -1 EINTR (Interrupted system call)
11:20:02 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:20:02 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:20:02 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:20:02 getdents64(4, 0x5591ae1b8860 /* 4 entries */, 32768) = 112
11:20:02 newfstatat(AT_FDCWD, "a0001301a28069", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:20:02 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:20:02 close(4)                       = 0
11:20:02 clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=58, tv_nsec=0}, 0x7ffeb0a9e990) = 0
11:21:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:21:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:21:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:21:00 getdents64(4, 0x5591ae1b8860 /* 4 entries */, 32768) = 112
11:21:00 newfstatat(AT_FDCWD, "a0001301a28069", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:21:00 setreuid(2, 0)                 = 0
11:21:00 setregid(2, 0)                 = 0
11:21:00 link("a0001301a28069", "=0001301a28069") = 0
11:21:00 setregid(0, 2)                 = 0
11:21:00 setreuid(0, 2)                 = 0
11:21:00 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff4b1fbd590) = 1501
11:21:00 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:21:00 close(4)                       = 0
11:21:00 clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=3600, tv_nsec=0}, {tv_sec=3599, tv_nsec=984348862}) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
11:21:00 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1501, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
11:21:00 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 1501
11:21:00 wait4(-1, 0x7ffeb0a9e3a4, WNOHANG, NULL) = -1 ECHILD (No child processes)
11:21:00 rt_sigreturn({mask=[]})        = -1 EINTR (Interrupted system call)
11:21:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:21:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:21:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:21:00 getdents64(4, 0x5591ae1b8860 /* 3 entries */, 32768) = 72
11:21:00 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:21:00 close(4)                       = 0

at-3.2.4 expected time 11:16:00
Code: [Select]
11:15:21 pause()                        = ? ERESTARTNOHAND (To be restarted if no handler)
11:15:30 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=1387, si_uid=1000} ---
11:15:30 rt_sigreturn({mask=[]})        = -1 EINTR (Interrupted system call)
11:15:30 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:15:30 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:15:30 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:15:30 getdents64(4, 0x55e77a45d860 /* 4 entries */, 32768) = 112
11:15:30 newfstatat(AT_FDCWD, "a0001201a28064", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:15:30 getdents64(4, 0x55e77a45d860 /* 0 entries */, 32768) = 0
11:15:30 close(4)                       = 0
11:15:30 timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1645614960, tv_nsec=0}}, NULL) = 0
11:15:30 pause()                        = ? ERESTARTNOHAND (To be restarted if no handler)
11:16:00 --- SIGHUP {si_signo=SIGHUP, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_int=2035884192, si_ptr=0x55e7795920a0} ---
11:16:00 rt_sigreturn({mask=[]})        = -1 EINTR (Interrupted system call)
11:16:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:16:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:16:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:16:00 getdents64(4, 0x55e77a45d860 /* 4 entries */, 32768) = 112
11:16:00 newfstatat(AT_FDCWD, "a0001201a28064", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:16:00 getdents64(4, 0x55e77a45d860 /* 0 entries */, 32768) = 0
11:16:00 close(4)                       = 0
11:16:00 timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1645614960, tv_nsec=0}}, NULL) = 0
11:16:00 --- SIGHUP {si_signo=SIGHUP, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_int=2035884192, si_ptr=0x55e7795920a0} ---
11:16:00 rt_sigreturn({mask=[]})        = 0
11:16:00 pause()        

Re: at-3.2.4-1.1 doesn't work as expected

Reply #1
I can't confirm this with at-3.2.4-1.1, although my at queue is usually empty. A test run (touch some file in /tmp) executed right on time.

 

Re: at-3.2.4-1.1 doesn't work as expected

Reply #2
I tried again today and now the artix x86_64 at-3.2.4-1.1 version works. However, the armtix aarch64 equivalent doesn't. Wonder if it's some kind of timing error.