summaryrefslogtreecommitdiff
path: root/system/pdksh/patches/108_Debian-sysconf_retval_check.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/pdksh/patches/108_Debian-sysconf_retval_check.patch')
-rw-r--r--system/pdksh/patches/108_Debian-sysconf_retval_check.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/system/pdksh/patches/108_Debian-sysconf_retval_check.patch b/system/pdksh/patches/108_Debian-sysconf_retval_check.patch
new file mode 100644
index 0000000000..c0a710a90a
--- /dev/null
+++ b/system/pdksh/patches/108_Debian-sysconf_retval_check.patch
@@ -0,0 +1,41 @@
+Fix `internal error: j_async: bad nzombie (0)' that occured with `sudo pdksh -c "sleep 10&"'
+
+Sudo sets RLIMIT_NPROC to unlimited, and sysconf returns that value as -1.
+Index: pdksh-5.2.14/jobs.c
+===================================================================
+--- pdksh-5.2.14.orig/jobs.c 2008-05-26 21:46:41.000000000 +0200
++++ pdksh-5.2.14/jobs.c 2008-05-26 21:56:12.000000000 +0200
+@@ -174,9 +174,9 @@
+ static Job *async_job;
+ static pid_t async_pid;
+
+-static int nzombie; /* # of zombies owned by this process */
++static long nzombie; /* # of zombies owned by this process */
+ static INT32 njobs; /* # of jobs started */
+-static int child_max; /* CHILD_MAX */
++static long child_max; /* CHILD_MAX */
+
+
+ #ifdef JOB_SIGS
+@@ -227,6 +227,12 @@
+ int mflagset;
+ {
+ child_max = CHILD_MAX; /* so syscon() isn't always being called */
++#if defined(HAVE_SYSCONF) && defined(_SC_CHILD_MAX)
++ if (child_max < 0) {
++ child_max = LONG_MAX;
++ }
++#endif
++
+
+ #ifdef JOB_SIGS
+ sigemptyset(&sm_default);
+@@ -1131,7 +1137,7 @@
+ if (!oldest) {
+ /* XXX debugging */
+ if (!(async_job->flags & JF_ZOMBIE) || nzombie != 1) {
+- internal_errorf(0, "j_async: bad nzombie (%d)", nzombie);
++ internal_errorf(0, "j_async: bad nzombie (%ld)", nzombie);
+ nzombie = 0;
+ }
+ break;