slock-auto-timeout.1.5.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slock-auto-timeout.1.5.diff (2417B)
       ---
            1 From 4abaf79e90a54c645fbd1a8439a976ee2ba5dde7 Mon Sep 17 00:00:00 2001
            2 From: Karsaell <pieds.nus@zaclys.net>
            3 Date: Wed, 5 Oct 2022 14:25:12 +0200
            4 Subject: [PATCH] [patch][auto-timeout] updated patch autotimeout
            5 
            6 Previous patch had an infinite loop without sleep()
            7 causing slock to run at 100% CPU
            8 (Noticed it because my laptop's fan started a few seconds after slock)
            9 
           10 Now the timeout and its command are run in a separate thread
           11 This adds a dependency to pthread at compile time
           12   (not sure if this can be an issue ?)
           13 ---
           14  config.def.h |  8 ++++++++
           15  config.mk    |  2 +-
           16  slock.c      | 20 ++++++++++++++++++++
           17  3 files changed, 29 insertions(+), 1 deletion(-)
           18 
           19 diff --git a/config.def.h b/config.def.h
           20 index 9855e21..a1179a8 100644
           21 --- a/config.def.h
           22 +++ b/config.def.h
           23 @@ -10,3 +10,11 @@ static const char *colorname[NUMCOLS] = {
           24  
           25  /* treat a cleared input like a wrong password (color) */
           26  static const int failonclear = 1;
           27 +
           28 +/* Patch: auto-timeout */
           29 +/* should [command] be run only once? */
           30 +static const int runonce = 0;
           31 +/* length of time (seconds) until [command] is executed */
           32 +static const int timeoffset = 30;
           33 +/* command to be run after [timeoffset] seconds has passed */
           34 +static const char *command = "/usr/bin/xset dpms force off";
           35 diff --git a/config.mk b/config.mk
           36 index 1e1ca45..8955075 100644
           37 --- a/config.mk
           38 +++ b/config.mk
           39 @@ -29,4 +29,4 @@ COMPATSRC = explicit_bzero.c
           40  #COMPATSRC =
           41  
           42  # compiler and linker
           43 -CC = cc
           44 +CC = cc -pthread
           45 diff --git a/slock.c b/slock.c
           46 index 5ae738c..c56c944 100644
           47 --- a/slock.c
           48 +++ b/slock.c
           49 @@ -19,6 +19,10 @@
           50  #include <X11/Xlib.h>
           51  #include <X11/Xutil.h>
           52  
           53 +/*POSIX threading for auto-timeout*/
           54 +#include <pthread.h>
           55 +#include <time.h>
           56 +
           57  #include "arg.h"
           58  #include "util.h"
           59  
           60 @@ -219,6 +223,18 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
           61          }
           62  }
           63  
           64 +void *timeoutCommand(void *args)
           65 +{
           66 +        int runflag=0;
           67 +        while (!runonce || !runflag)
           68 +        {
           69 +                sleep(timeoffset);
           70 +                runflag = 1;
           71 +                system(command);
           72 +        }
           73 +        return args;
           74 +}
           75 +
           76  static struct lock *
           77  lockscreen(Display *dpy, struct xrandr *rr, int screen)
           78  {
           79 @@ -388,6 +404,10 @@ main(int argc, char **argv) {
           80                  }
           81          }
           82  
           83 +        /*Start the auto-timeout command in its own thread*/
           84 +        pthread_t thread_id;
           85 +        pthread_create(&thread_id, NULL, timeoutCommand, NULL);
           86 +
           87          /* everything is now blank. Wait for the correct password */
           88          readpw(dpy, &rr, locks, nscreens, hash);
           89  
           90 -- 
           91 2.30.2
           92