This is the mail archive of the cygwin-patches@cygwin.com 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]

dll_index NO_COPY patch


The attached patch fixes the problem described in the following thread:

    http://cygwin.com/ml/cygwin-developers/2002-11/msg00019.html

Given the following facts:

    1. During fork(), fork_copy() is run after
       dll_list::load_after_fork().
    2. The static dll_index variable in include/cygwin/cygwin_dll.h is
       not marked NO_COPY.
    3. The dll structure allocated by dll_list::alloc() is not
       guaranteed to be the same in the parent and child.

I believe that the following is the correct root cause analysis of the
problem:

    When #3 above occurs, fork_copy() overwrites the child's dll_index
    with the parent's value.  This causes dll_list::detach() to access
    unallocated memory which in turn causes the child to stackdump.

Jason

-- 
PGP/GPG Key: http://www.tishler.net/jason/pubkey.asc or key servers
Fingerprint: 7A73 1405 7F2B E669 C19D  8784 1AFD E4CC ECF4 8EF6

Attachment: cygwin_dll.h.diff
Description: Text document

Attachment: cygwin_dll.h.ChangeLog
Description: Text document


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