From: "Tim Van Holder" To: Cc: "Eli Zaretskii" 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 Precedence: bulk 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?