X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Message-ID: <48A8E552.3070803@cwilson.fastmail.fm> Date: Sun, 17 Aug 2008 22:58:26 -0400 From: Charles Wilson User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080708 Thunderbird/2.0.0.16 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Bug in cygcheck (1.7) References: <48A787F0 DOT 408 AT cwilson DOT fastmail DOT fm> <48A8188E DOT 4030203 AT elite-systems DOT org> <20080817165425 DOT GA3708 AT ednor DOT casa DOT cgf DOT cx> <48A85BA5 DOT 20501 AT cwilson DOT fastmail DOT fm> In-Reply-To: <48A85BA5.20501@cwilson.fastmail.fm> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Charles Wilson wrote: > Christopher Faylor wrote: >> I can't duplicate this either. > > Very strange. I'll see if I can't build a debug version of cygcheck and > figure out what's going on. It's very odd. It's intermittent, and I can't get it to occur under gdb. Here's a bizarro for you. With the following patch Index: dump_setup.cc =================================================================== RCS file: /cvs/src/src/winsup/utils/dump_setup.cc,v retrieving revision 1.18 diff -u -r1.18 dump_setup.cc --- dump_setup.cc 19 Dec 2005 16:58:33 -0000 1.18 +++ dump_setup.cc 18 Aug 2008 01:45:58 -0000 @@ -397,6 +397,9 @@ check_files ? " Status" : ""); for (int i = 0; packages[i].name; i++) { + pkgver* p = &(packages[i]); + pkgver* np = &(packages[i+1]); + printf("curr = %8p (&name=%8p), next = %8p (&name=%8p)\n", p, p->name, np, np->name); if (check_files) printf ("%-*s %-*s%s\n", package_len, packages[i].name, version_len, packages[i].ver, I get the following output on successive runs: $ cygcheck -cd Cygwin Package Information Package Version curr = 003E5758 (&name=003E9F08), next = 003E5760 (&name=003E6BF8) _update-info-dir 00749-1 curr = 003E5760 (&name=003E6BF8), next = 003E5768 (&name=003E6C20) aalib 1.4rc5-2 curr = 003E5768 (&name=003E6C20), next = 003E5770 (&name=003E6C50) aalib-devel 1.4rc5-2 curr = 003E5770 (&name=003E6C50), next = 003E5778 (&name=003E6C80) curr = 003E5770 (&name=003E6C50), next = 003E5778 (&name=003E6C80) $ cygcheck -cd Cygwin Package Information Package Version curr = 003E5758 (&name=003E9F08), next = 003E5760 (&name=003E6BF8) _update-info-dir 00749-1 curr = 003E5760 (&name=003E6BF8), next = 003E5768 (&name=003E6C20) aalib 1.4rc5-2 curr = 003E5768 (&name=003E6C20), next = 003E5770 (&name=003E6C50) curr = 003E5768 (&name=003E6C20), next = 003E5770 (&name=003E6C50) $ cygcheck -cd Cygwin Package Information Package Version curr = 003E5758 (&name=003E9F08), next = 003E5760 (&name=003E6BF8) _update-info-dir 00749-1 curr = 003E5760 (&name=003E6BF8), next = 003E5768 (&name=003E6C20) aalib 1.4rc5-2 aalib 1.4rc5-2 Note that the loop in dump_setup() is "on the last entry" when next->name is null. That is never the case in any of the short runs above. Also, in every case, the last line of output is doubled, and then nothing further appears. The exit code in each case is 0. Another odditiy: I know that cygcheck is not a cygwin program, but it does load and iniitalize the cygwin dll. So, I ran it under strace. In this scenario, sometimes cygcheck operates correctly, and sometimes it does not. When cygcheck operates correctly, the strace log is completely empty. When it doesn't (that is, when I get a short output), the strace log shows a single message: --- Process 3872, exception C0000005 at 610031A8 The address is always the same (but addr2line reports '??:0' so that's no help). In gdb, 'info line *0x610031A8' says Line 59 of "/usr/src/kernel/src/winsup/cygwin/cygthread.cc" starts at address 0x610031a8 <_ZN9cygthread4stubEPv> and ends at 0x610031ac <_ZN9cygthread4stubEPv+4>. 54 /* Initial stub called by cygthread constructor. Performs initial 55 per-thread initialization and loops waiting for another thread function 56 to execute. */ 57 DWORD WINAPI 58 cygthread::stub (VOID *arg) 59 { 60 cygthread *info = (cygthread *) arg; 61 _my_tls._ctinfo = info; 62 if (info->arg == cygself) 63 { Which doesn't tell /me/ much -- especially as the bad behavior never occurs under gdb. But, 0xC0000005 seems very familiar -- only, how can we have a "missing dll" error, if the only dll involved is cygwin1.dll, and we're actually executing code IN that dll when the exception occurs? In the mangled words of Inigo Montoya, I do not think that exception means what you think it means. I /really/ wish that this behavior was observed by somebody else...sigh. -- Chuck -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/