_impure_ptr uninitialized in DLLs?

Chris Faylor cgf@cygnus.com
Fri Jul 14 21:48:00 GMT 2000


On Wed, Jul 12, 2000 at 10:42:27PM -0400, Chris Faylor wrote:
>On Wed, Jul 12, 2000 at 07:03:07PM +0100, Fifer, Eric wrote:
>>>This should be fixed in CVS now.  It will require updating libcygwin.a.
>>
>>I'm still having problems.  The dlopen() flavor works now, but when
>>linking against a normal DLL, environ is NULL in the main program.
>>
>>Here's another demonstration:
>
>I see the problem.  I've been resisting the urge to rewrite the dll_init.cc
>rat's nest.  I don't know how much longer I can hold out.

Phew.

Well, I couldn't hold out.  I've rewritten dll_init.{c,h}.  I'm sure that
I've introduced some new bugs but Eric's problems now seem to be fixed.
For additional testing, I also wrote a perl script which used a couple
of dlls, and then forks and uses functions from the dlls again.  Perl's
use of DLLs have always been problematic but they seemed to work in
this simple scenario.

(I *really* need to set up a cygwin test suite)

>In scratching this bug I found another problem.  dll_init routines can use
>malloc in some circumstances.  This means that there is a potential deadlock
>situation since DLL initialization is serialized and malloc uses a mutex
>to serialize its access.

Getting things working in such a way that malloc was not used was very
tricky.  It seems to work for WNT and W95 but...

These change will require updating both cygwin1.dll *and* libcygwin.a, YA.

cgf


More information about the Cygwin-developers mailing list