Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs Date: Wed, 15 Oct 2003 12:59:17 -0400 (EDT) From: Igor Pechtchanski Reply-To: cygwin AT cygwin DOT com To: Brian Ford cc: cygwin AT cygwin DOT com Subject: Re: cygpath hangings In-Reply-To: Message-ID: References: <20031014100230 DOT A12215 AT fw DOT j-son DOT org> <006501c392b7$dc780730$200aa8c0 AT thorin> <3F8BE1B9 DOT 3000704 AT cs DOT york DOT ac DOT uk> Importance: Normal MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 14 Oct 2003, Brian Ford wrote: > On Tue, 14 Oct 2003, Igor Pechtchanski wrote: > >Brian Ford wrote: > > > There will be no ouput unless main calls foo, right? > > > > Actually, if the DLL was loaded, there should be output even if foo isn't > > called... > > > Just linking to it causes a load, or is it the first referance? I'm a DLL > dunce. I've just verified that the DLL is loaded even if no functions from it are called (or variables referenced). FWIW, here's the code I used: $ cat > cpath.c int hello(); void foo (void) { hello(); } int main (int argc, char **argv) { return 0; } $ cat > cygx.c #include #include static int counter = 0; static FILE *output = NULL; int hello() { fprintf (output, "Hello world for the %dth time!\n", counter); fflush (output); return counter++; } BOOL WINAPI DllMain(HINSTANCE h, DWORD f, LPVOID r) { if (!output) output = fopen("cygx.out", "wt"); fprintf (output, "DLL loaded: "); switch (f) { case DLL_PROCESS_ATTACH: fprintf (output, "process attach"); break; case DLL_THREAD_ATTACH: fprintf (output, "thread attach"); break; case DLL_THREAD_DETACH: fprintf (output, "thread detach"); break; case DLL_PROCESS_DETACH: fprintf (output, "process detach"); break; default: fprintf (output, "WTF?!"); } fprintf (output, "\n"); fflush (output); return TRUE; } $ gcc -mno-cygwin -shared -o cygx.dll cygx.c $ gcc -o cpath.exe cpath.c -L. -lcygx $ ./cpath.exe; cat cygx.out DLL loaded: process attach DLL loaded: thread attach DLL loaded: process detach $ > > > Then, I still get a hang under setup from explorer; no output. > > > > This could be because the DLL was not loaded, or because of the two stdio > > conflicts... Did you compile the DLL with -mno-cygwin? > > No. I guess you wanted me too? :) I don't know if it matters, frankly. It looks like the DLL is loaded, but it doesn't load completely. Maybe something that SHLWAPI.DLL is doing on initialization? > > > Stand alone in a shell, output is: > > > > > > DLL loaded: process attach > > > DLL loaded: thread attach > > > Segmentation fault (core dumped) > > > > > > The SEGV is expected given the code is invalid anyway. > > > > > > Nothing to see here... move along... > > > [snip test_dll.c] > > > > Hmm. Maybe if the DLL has exported global variables, not just functions? > > I'll see if I can come up with the appropriate code and will then post it > > to the list. > > > Not following, but ok. I meant making "counter" in the above example global rather than static. Turns out it doesn't make a difference -- the DLL is loaded anyway. I still suspect the initialization code in SHLWAPI.DLL is doing something that Cygwin doesn't like. Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D. '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! "I have since come to realize that being between your mentor and his route to the bathroom is a major career booster." -- Patrick Naughton -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/