On Wed, Feb 08, 2012 at 02:35:02PM +0100, Corinna Vinschen wrote: >> On Feb 8 14:00, Corinna Vinschen wrote: >> > On Feb 8 11:22, Denis Excoffier wrote: >> > > I can reproduce. >> > > >> > > On my system (2012-02-07 snapshot instrumented), the following is able >> > > to exercise the fork failure any time. >> > > >> > > I do this from within a dedicated directory named "stc". >> > > Current shell seems indifferent. Here it is /bin/tcsh and >> > > i've tried with /bin/bash with the same result. >> > > >> > > % cat doit1 >> > > #!/usr/bin/tcsh -f >> > > setenv PATH "/usr/bin" >> > > cp /usr/bin/cyggcc_s-1.dll . >> > > ls >> > > rm cyggcc_s-1.dll >> > > % >> > > % cat doit2 >> > > #!/tmp/tcsh -f >> > > setenv PATH "/usr/bin" >> > > cp /usr/bin/cyggcc_s-1.dll . >> > > ls >> > > rm cyggcc_s-1.dll >> > > % >> > > >> > > Also you will need to do (once): cp /usr/bin/tcsh.exe /tmp/tcsh.exe >> > > >> > > >> > > % ./doit1 >> > > cyggcc_s-1.dll doit1 doit2 >> > > % >> > > % ./doit2 >> > > 1 [main] tcsh 3660 dll_list::reserve_space: address space needed >> > > by 'cygiconv-2.dll' (0x674C0000 with type 1=DLL_LINK) >> > > [...etc...] >> > >> > Thanks for the testcase! I can reproduce now as well. I think I see >> > what's going wrong, but I'm not quite sure what the best fix is. Stay >> > tuned. >> >> What happens in this testcase is that Cygwin checks the full DLL path >> and then finds that the new path to cyggcc_s-1.dll is not the same as >> the path it has already loaded. Therefore it assumes that it has to add >> the file to list. >> >> This is plainly wrong, because, as you can read on >> http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx the >> Windows loader does not load a DLL again, if it already has a module >> loaded which has the same basename. Therefore the test for the full >> pathname in Cygwin has to to be replaced with only testing the module >> basename. >> >> However, while this situation in the doit2 testcase is simply explained, >> I don't see how this affects your rsync call. >> >> Denis, can you please change your test output? Instead of printing only >> d_alt->modname, please print d_alt->name and then run your rsync test >> again. If this is the same problem as in the doit testcase, I'd like to >> see where the second cygiconv-2.dll is coming from. In theory, if you >> have only a single installation of cygiconv-2.dll, this should'nt >> happen. Here it is. Enjoy! 1 [main] gcc-4 5440 dll_list::reserve_space: address space needed by 'cygiconv-2.dll' (file D:\Home\dexcoff1\dexcoff1\cygwin2011f\bin\cygiconv-2.dll) (0x674C0000 with type 1=DLL_LINK) 1580 [main] gcc-4 5440 dll_list::reserve_space: address space needed by 'cygintl-8.dll' (file D:\Home\dexcoff1\dexcoff1\cygwin2011f\bin\cygintl-8.dll) (0x6F5C0000 with type 1=DLL_LINK) 1899 [main] gcc-4 5440 dll_list::reserve_space: address space needed by 'cygiconv-2.dll' (file \\?\D:\Home\dexcoff1\dexcoff1\cygwin2011f\bin\cygiconv-2.dll) (0x674C0000 with type 2=DLL_LOAD) 2562 [main] gcc-4 5440 dll_list::reserve_space: address space needed by 'cygintl-8.dll' (file \\?\D:\Home\dexcoff1\dexcoff1\cygwin2011f\bin\cygintl-8.dll) (0x6F5C0000 with type 2=DLL_LOAD) 3290 [main] gcc-4 5440 child_info_fork::abort: address space needed by 'cygiconv-2.dll' (0x674C0000) is already occupied 2 [main] gcc 3408 fork: child -1 - forked process died unexpectedly, retry 0, exit code 1, errno 11
I don't think you will need /proc/5440/maps this time. Regards, Denis. -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple