summaryrefslogtreecommitdiff
path: root/perl.c
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2019-07-04 15:02:46 +1000
committerTony Cook <tony@develop-help.com>2019-07-09 14:13:41 +1000
commit2773b4f50f991900e38d33daace2b9c6a0902c6a (patch)
treefc0631c52eed7967728be4608094e9c1e20da283 /perl.c
parent256dda502eca71f547885c73901e8e8b42d47174 (diff)
downloadperl-2773b4f50f991900e38d33daace2b9c6a0902c6a.tar.gz
Revert "postpone perl_parse() exit(0) bugfix"
This reverts commit 857320cbf85e762add18885ae8a197b5e0c21b69, re-instating the [perl #2754] fix, which was reverted in late 2017 to allow Module::Install based distributions to update or re-work per [perl #132577]. # Conflicts: # t/op/blocks.t
Diffstat (limited to 'perl.c')
-rw-r--r--perl.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/perl.c b/perl.c
index e642f2e76d..a84a0a955b 100644
--- a/perl.c
+++ b/perl.c
@@ -1624,16 +1624,13 @@ For historical reasons, the non-zero return value also attempts to
be a suitable value to pass to the C library function C<exit> (or to
return from C<main>), to serve as an exit code indicating the nature
of the way initialisation terminated. However, this isn't portable,
-due to differing exit code conventions. A historical bug is preserved
-for the time being: if the Perl built-in C<exit> is called during this
-function's execution, with a type of exit entailing a zero exit code
-under the host operating system's conventions, then this function
-returns zero rather than a non-zero value. This bug, [perl #2754],
-leads to C<perl_run> being called (and therefore C<INIT> blocks and the
-main program running) despite a call to C<exit>. It has been preserved
-because a popular module-installing module has come to rely on it and
-needs time to be fixed. This issue is [perl #132577], and the original
-bug is due to be fixed in Perl 5.30.
+due to differing exit code conventions. An attempt is made to return
+an exit code of the type required by the host operating system, but
+because it is constrained to be non-zero, it is not necessarily possible
+to indicate every type of exit. It is only reliable on Unix, where a
+zero exit code can be augmented with a set bit that will be ignored.
+In any case, this function is not the correct place to acquire an exit
+code: one should get that from L</perl_destruct>.
=cut
*/
@@ -1842,15 +1839,7 @@ perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
call_list(oldscope, PL_checkav);
}
ret = STATUS_EXIT;
- if (ret == 0) {
- /*
- * At this point we should do
- * ret = 0x100;
- * to avoid [perl #2754], but that bugfix has been postponed
- * because of the Module::Install breakage it causes
- * [perl #132577].
- */
- }
+ if (ret == 0) ret = 0x100;
break;
case 3:
PerlIO_printf(Perl_error_log, "panic: top_env\n");