timer: Refine itimer_armed logic and improve timer value handling

Right now, CRIU skips timers non-periodic timers. This change addresses
this issue.

Signed-off-by: Austin Kuo <hsuanchikuo@gmail.com>
This commit is contained in:
Austin Kuo 2025-01-07 04:31:05 +00:00 committed by Andrei Vagin
parent aad66a4f7c
commit 09dc2e9584
2 changed files with 2 additions and 2 deletions

View file

@ -2226,7 +2226,7 @@ __visible long __export_restore_task(struct task_restore_args *args)
* code below doesn't fail due to bad timing values.
*/
#define itimer_armed(args, i) (args->itimers[i].it_interval.tv_sec || args->itimers[i].it_interval.tv_usec)
#define itimer_armed(args, i) (args->itimers[i].it_value.tv_sec || args->itimers[i].it_value.tv_usec)
if (itimer_armed(args, 0))
sys_setitimer(ITIMER_REAL, &args->itimers[0], NULL);

View file

@ -16,7 +16,7 @@ static inline int timeval_valid(struct timeval *tv)
static inline int decode_itimer(char *n, ItimerEntry *ie, struct itimerval *val)
{
if (ie->isec == 0 && ie->iusec == 0) {
if (ie->isec == 0 && ie->iusec == 0 && ie->vsec == 0 && ie->vusec == 0) {
memzero_p(val);
return 0;
}