This is the mail archive of the cygwin-developers@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] | |
On Thu, Nov 07, 2002 at 12:18:31PM -0500, Jason Tishler wrote:
> The above seems to imply that a bad address is passed into
> cygwin_detach_dll() for one of the DLLs. Unfortunately, I don't
> understand why.
The above is an incorrect hypothesis. Using the attached patch, I was
able to determine that the problem is on the dll_list::alloc() side:
$ strace -o dll-25-2.log dll *.dll
$ fgrep VirtualAlloc: dll-25-2.log | cut -c 31-
dll_list::alloc: JLT: VirtualAlloc: i = 3, n = 0x674E0000
dll_list::alloc: JLT: VirtualAlloc: i = 5, n = 0xAD0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xAF0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0x67F70000
**> dll_list::alloc: JLT: VirtualAlloc: i = 8, n = 0xB40000 <**
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xB60000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xB80000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xBC0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xBE0000
dll_list::alloc: JLT: VirtualAlloc: i = 3, n = 0x674E0000
dll_list::alloc: JLT: VirtualAlloc: i = 5, n = 0xAD0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xAF0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0x67F70000
**> dll_list::alloc: JLT: VirtualAlloc: i = 5, n = 0xB20000 <**
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xB60000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xB80000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xBC0000
dll_list::alloc: JLT: VirtualAlloc: i = 4, n = 0xBE0000
The lines above marked by "**>" correspond to the Expat.dll. The first
corresponds to the parent, the second to the child. Note that the dll
structure is located in a different place in the child than in the
parent. Hence, when dll_list::detach() is called in the child, a memory
access violation occurs.
It appears that a child can have a free region that the parent didn't
when dll_list::alloc() is called. Is there a way to get the child to
skip these holes?
Thanks,
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:
dll_init.cc.diff
Description: Text document
Attachment:
dll-25-2.log
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |