This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: cygwin-1.7.10-1 fork - address space needed by ... already in use


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]