diff --git a/dwl.c b/dwl.c index 61a94c7..884b2a4 100644 --- a/dwl.c +++ b/dwl.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -328,6 +329,8 @@ static void zoom(const Arg *arg); /* variables */ static const char broken[] = "broken"; +static struct rlimit oldrlimit; +static struct rlimit newrlimit; static const char *cursor_image = "left_ptr"; static pid_t child_pid = -1; static void *exclusive_focus; @@ -463,6 +466,7 @@ autostartexec(void) { autostart_pids = calloc(autostart_len, sizeof(pid_t)); for (p = autostart; *p; i++, p++) { if ((autostart_pids[i] = fork()) == 0) { + setrlimit(RLIMIT_CORE, &oldrlimit); setsid(); execvp(*p, (char *const *)p); fprintf(stderr, "dwl: execvp %s\n", *p); @@ -2207,6 +2211,7 @@ run(char *startup_cmd) if ((child_pid = fork()) < 0) die("startup: fork:"); if (child_pid == 0) { + setrlimit(RLIMIT_CORE, &oldrlimit); dup2(piperw[0], STDIN_FILENO); close(piperw[0]); close(piperw[1]); @@ -2613,6 +2618,7 @@ void spawn(const Arg *arg) { if (fork() == 0) { + setrlimit(RLIMIT_CORE, &oldrlimit); dup2(STDERR_FILENO, STDOUT_FILENO); setsid(); execvp(((char **)arg->v)[0], (char **)arg->v); @@ -3066,6 +3072,10 @@ main(int argc, char *argv[]) char *startup_cmd = NULL; int c; + getrlimit(RLIMIT_CORE, &oldrlimit); + newrlimit.rlim_cur = newrlimit.rlim_max = oldrlimit.rlim_max; + setrlimit(RLIMIT_CORE, &newrlimit); + while ((c = getopt(argc, argv, "s:hv")) != -1) { if (c == 's') startup_cmd = optarg;