www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1999/05/22/21:23:54

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
Sender: cygwin-owner AT sourceware DOT cygnus DOT com
Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com
Message-Id: <199905230017.TAA01327@mercury.xraylith.wisc.edu>
To: cygwin AT sourceware DOT cygnus DOT com
cc: cgf AT cygnus DOT com, dj AT cygnus DOT com
Subject: Re: fork + dlls
In-Reply-To: Your message of "Sat, 22 May 1999 13:26:31 CDT."
<199905221826 DOT NAA00916 AT mercury DOT xraylith DOT wisc DOT edu>
Date: Sat, 22 May 1999 19:17:30 -0500
From: Mumit Khan <khan AT xraylith DOT wisc DOT EDU>

I had written earlier (and on an empty stomach):
> 
> This has been a bug since day one, and one that needs a bit of redesign
> of the code in winsup/dll_init.cc to do it right. The current code there
> is quite complex, and overly so in some cases, and someone who knows more 
> about it needs to take a look. 

I was confused. My local hack was completely unnecessary since the code
is actually all there, albeit a bit too complex for me to comprehend at
first [and here's where I plug in the empty stomach bit].

The following should fix Eric's testcase that uses dlsym across fork.

The strcmp->strcasecmp is necessary since the get_full_path_of_dll()
in dlfcn.cc doesn't necessarily have the same case as the name returned 
by GetModuleFileName() checked by DllList::recordDll. Amazing how these
little things can steer you in the wrong direction!

Chris, the case-insensitive filename comparison should fix the problem 
you had mentioned. Could you please check?

Sat May 22 19:03:47 1999  Mumit Khan  <khan AT xraylith DOT wisc DOT edu>

	* dll_init.cc (DllList::recordDll): Forkee must reload dlopened
	DLLs. Also use strcasecmp, not strcmp to compare file name.

Index: dll_init.cc
===================================================================
RCS file: /home/khan/CVSROOT/cygwin/cygwin-dev/winsup/dll_init.cc,v
retrieving revision 1.1.1.1
diff -u -3 -p -p -r1.1.1.1 dll_init.cc
--- dll_init.cc	1999/05/21 23:51:12	1.1.1.1
+++ dll_init.cc	1999/05/23 01:04:44
@@ -185,6 +185,7 @@ DllList::recordDll (HMODULE h, per_proce
     {
       type = LOAD;
       _numberOfOpenedDlls++;
+      forkeeMustReloadDlls (1);
     }
 
   if (type == LOAD && _dlopenedLib !=0)
@@ -193,7 +194,7 @@ DllList::recordDll (HMODULE h, per_proce
     GetModuleFileName (h, buf, MAX_PATH);
     // it is not the current dlopened lib
     // so we insert one empty lib to preserve place for current dlopened lib
-    if (strcmp (_dlopenedLib, buf) != 0)
+    if (strcasecmp (_dlopenedLib, buf) != 0)
       {
       if (_dlopenIndex == -1)
 	_dlopenIndex = add (0, 0, NONE);

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019