delorie.com/archives/browse.cgi | search |
From: | "Tim Van Holder" <tim DOT van DOT holder AT pandora DOT be> |
To: | <djgpp-workers AT delorie DOT com> |
Cc: | "Eli Zaretskii" <eliz AT is DOT elta DOT co DOT il> |
Subject: | Re: The Perl/FD issue: update |
Date: | Sun, 23 Sep 2001 20:35:42 +0200 |
Message-ID: | <000601c1445e$8d466520$047d76d5@pandora.be> |
MIME-Version: | 1.0 |
X-Priority: | 3 (Normal) |
X-MSMail-Priority: | Normal |
X-Mailer: | Microsoft Outlook, Build 10.0.2627 |
Importance: | Normal |
X-MimeOLE: | Produced By Microsoft MimeOLE V5.50.4807.1700 |
In-reply-to: | <2950-Sun23Sep2001185940+0300-eliz@is.elta.co.il> |
Reply-To: | djgpp-workers AT delorie DOT com |
Errors-To: | nobody AT delorie DOT com |
X-Mailing-List: | djgpp-workers AT delorie DOT com |
X-Unsubscribes-To: | listserv AT delorie DOT com |
This is the output from autoconf's testsuite (test 4) M4 gets run twice; the "'debug' FILE*" lines come from m4, right before main()'s call to exit(); the others come from the fcloseall helper. +'debug' FILE* current state: + _cnt = 15075 + _ptr = 137b2d + _base = 137610 + _bufsiz = 16384 + _flag = 48 + _file = 3 + _name_to_remove = (null) + _fillsize = 0 >> seems normal +Auto-closing file: + _cnt = 0 + _ptr = 0 + _base = 0 + _bufsiz = 0 + _flag = 12 + _file = 0 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns 0 >> stdin; OK +Auto-closing file: + _cnt = 0 + _ptr = 0 + _base = 0 + _bufsiz = 0 + _flag = 17 + _file = 1 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns 0 >> stdout; OK +Auto-closing file: + _cnt = 0 + _ptr = c1248 + _base = 0 + _bufsiz = 0 + _flag = 18 + _file = 2 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns 0 >> stderr; OK +Auto-closing file: + _cnt = 0 + _ptr = 0 + _base = 0 + _bufsiz = 0 + _flag = 18 + _file = 4 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns 0 +* fclose(f) returns -1 >> stdaux/stdprn - was closed by Perl, so close fails +Auto-closing file: + _cnt = 0 + _ptr = 0 + _base = 0 + _bufsiz = 0 + _flag = 514 + _file = 3 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns 0 +* fclose(f) returns 0 >> FD 3, but not our file +Auto-closing file: + _cnt = 15075 + _ptr = 137b2d + _base = 137610 + _bufsiz = 16384 + _flag = 48 + _file = 3 + _name_to_remove = (null) + _fillsize = 0 +* fflush(f) returns -1 +* fclose(f) returns -1 >> Aha - BINGO - this is actually our file. So the problem seems to be that FD 3 gets closed using the WRONG FILE structure (stdaux?) -> the close works, but does no flushing. Then the fflush and close fail because the FD is closed. So I guess we need skip stdaux and stdprn in fcloseall, if those FD's were closed at startup?
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |