Module Name: src Committed By: christos Date: Sun Jan 26 22:38:20 UTC 2014
Modified Files: src/bin/sh: eval.c jobs.c Log Message: explain why forks fail To generate a diff of this commit: cvs rdiff -u -r1.107 -r1.108 src/bin/sh/eval.c cvs rdiff -u -r1.71 -r1.72 src/bin/sh/jobs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/sh/eval.c diff -u src/bin/sh/eval.c:1.107 src/bin/sh/eval.c:1.108 --- src/bin/sh/eval.c:1.107 Thu Jun 27 19:22:04 2013 +++ src/bin/sh/eval.c Sun Jan 26 17:38:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: eval.c,v 1.107 2013/06/27 23:22:04 yamt Exp $ */ +/* $NetBSD: eval.c,v 1.108 2014/01/26 22:38:20 christos Exp $ */ /*- * Copyright (c) 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)eval.c 8.9 (Berkeley) 6/8/95"; #else -__RCSID("$NetBSD: eval.c,v 1.107 2013/06/27 23:22:04 yamt Exp $"); +__RCSID("$NetBSD: eval.c,v 1.108 2014/01/26 22:38:20 christos Exp $"); #endif #endif /* not lint */ @@ -845,15 +845,17 @@ evalcommand(union node *cmd, int flgs, s */ if (cmdentry.cmdtype == CMDNORMAL) { pid_t pid; + int serrno; savelocalvars = localvars; localvars = NULL; vforked = 1; switch (pid = vfork()) { case -1: - TRACE(("Vfork failed, errno=%d\n", errno)); + serrno = errno; + TRACE(("Vfork failed, errno=%d\n", serrno)); INTON; - error("Cannot vfork"); + error("Cannot vfork (%s)", strerror(serrno)); break; case 0: /* Make sure that exceptions only unwind to Index: src/bin/sh/jobs.c diff -u src/bin/sh/jobs.c:1.71 src/bin/sh/jobs.c:1.72 --- src/bin/sh/jobs.c:1.71 Mon Dec 31 09:10:15 2012 +++ src/bin/sh/jobs.c Sun Jan 26 17:38:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: jobs.c,v 1.71 2012/12/31 14:10:15 dsl Exp $ */ +/* $NetBSD: jobs.c,v 1.72 2014/01/26 22:38:20 christos Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)jobs.c 8.5 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: jobs.c,v 1.71 2012/12/31 14:10:15 dsl Exp $"); +__RCSID("$NetBSD: jobs.c,v 1.72 2014/01/26 22:38:20 christos Exp $"); #endif #endif /* not lint */ @@ -858,14 +858,16 @@ makejob(union node *node, int nprocs) int forkshell(struct job *jp, union node *n, int mode) { - int pid; + pid_t pid; + int serrno; TRACE(("forkshell(%%%d, %p, %d) called\n", jp - jobtab, n, mode)); switch ((pid = fork())) { case -1: - TRACE(("Fork failed, errno=%d\n", errno)); + serrno = errno; + TRACE(("Fork failed, errno=%d\n", serrno)); INTON; - error("Cannot fork"); + error("Cannot fork (%s)", strerror(serrno)); break; case 0: forkchild(jp, n, mode, 0);