[systemd-devel] [PATCH] logind: redefine idleness to start at last activity

Lennart Poettering lennart at poettering.net
Fri Aug 3 11:21:06 PDT 2012


On Mon, 23.07.12 00:17, Zbigniew Jędrzejewski-Szmek (zbyszek at in.waw.pl) wrote:

> Hi,
> 
> after reading the code, the following seems like a reasonable change
> of semantics. Please have a look.
> 
> ----8<-----
> 
> Before, after the timeout, a session would be timestamped as idle
> since 'last activity + idle timeout'. Now, it is timestamped as idle
> since 'last activity'.
> 
> Before, after all sessions were idle, the seat would be marked with as
> idle with the timestamp of the oldest idle session. Now it is
> marked with the timestamp of the youngest idle session.
> 
> Iow., the timeout to idle is not modified, only the timestamp that is
> reported. Both changes seem to me to be closer to natural understanding of
> when idleness started: at last activity. Of course we only can tell after
> waiting through the suitable timeout.

Looks good to me! Please commit (and keep this commit text in, of
course...).

Thanks!
> 
> ---
> 
>  src/login/logind-seat.c    | 2 +-
>  src/login/logind-session.c | 6 ++----
>  2 files changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
> index 0457121..11e41b5 100644
> --- a/src/login/logind-seat.c
> +++ b/src/login/logind-seat.c
> @@ -460,7 +460,7 @@ int seat_get_idle_hint(Seat *s, dual_timestamp *t) {
>  
>                  if (!ih) {
>                          if (!idle_hint) {
> -                                if (k.monotonic < ts.monotonic)
> +                                if (k.monotonic > ts.monotonic)
>                                          ts = k;
>                          } else {
>                                  idle_hint = false;
> diff --git a/src/login/logind-session.c b/src/login/logind-session.c
> index 819596d..6d40450 100644
> --- a/src/login/logind-session.c
> +++ b/src/login/logind-session.c
> @@ -731,7 +731,6 @@ int session_get_idle_hint(Session *s, dual_timestamp *t) {
>          char *p;
>          struct stat st;
>          usec_t u, n;
> -        bool b;
>          int k;
>  
>          assert(s);
> @@ -766,12 +765,11 @@ int session_get_idle_hint(Session *s, dual_timestamp *t) {
>  
>          u = timespec_load(&st.st_atim);
>          n = now(CLOCK_REALTIME);
> -        b = u + IDLE_THRESHOLD_USEC < n;
>  
>          if (t)
> -                dual_timestamp_from_realtime(t, u + b*IDLE_THRESHOLD_USEC);
> +                dual_timestamp_from_realtime(t, u);
>  
> -        return b;
> +        return u + IDLE_THRESHOLD_USEC < n;
>  
>  dont_know:
>          if (t)


Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list