Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com From: Chris Faylor Date: Fri, 5 Nov 1999 13:29:27 -0500 To: "Fifer, Eric" Cc: "'cygwin AT sourceware DOT cygnus DOT com'" Subject: Re: Wierd perl problem.. Message-ID: <19991105132927.A25775@cygnus.com> Reply-To: cygwin AT sourceware DOT cygnus DOT com Mail-Followup-To: "Fifer, Eric" , "'cygwin AT sourceware DOT cygnus DOT com'" References: <779F20BCCE5AD31186A50008C75D997917167F AT SILLDN_MAIL1> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.6i In-Reply-To: <779F20BCCE5AD31186A50008C75D997917167F@SILLDN_MAIL1>; from Fifer, Eric on Fri, Nov 05, 1999 at 05:14:15PM -0000 On Fri, Nov 05, 1999 at 05:14:15PM -0000, Fifer, Eric wrote: >Chris Faylor wrote: >>loading in perl just miraculously "works" now. > >I pulled down the 10/31/99 snapshot and I'm still seeing problems >with fork and dlls. I went back to my simple forkbug example (see >below) and it outputs: > >in child > 0 0 [main] s:\efifer\dev\cygwin\forkbug\forkbug1.exe 3192 >handle_exceptions: Exception: STATUS_ACCESS_VIOLATION > 0 15778 [main] forkbug1 3192 stackdump: Dumping stack trace to >forkbug1.exe.stackdump >pid=3192 status=0 >dll1_func=parent > >forkbug1.exe.stackdump: > >Exception: STATUS_ACCESS_VIOLATION at eip=00005110 >eax=6107B120 ebx=60C81010 ecx=00000009 edx=6107B3B4 esi=00020818 >edi=6107B40C >ebp=0240FE84 esp=0240FE68 program=s:\efifer\dev\cygwin\forkbug\forkbug1.exe >cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023 >Stack trace: >Frame Function Args >0240FE64 00005110 (6107B3B4, 60C81000, 00401070, 00000074) >0240FE84 60C81030 (00401070, 00401066, 0240FED4, 004010CF) >0240FED4 00401100 (00000001, 0A041238, 0A040008, 00000000) >0240FF30 61004870 (7FFDF000, 00000000, 00000000, 0040124C) >0240FF60 61004B1D (00403010, C0069000, 0240FF90, 00401292) >0240FF90 0040129F (00401090, 80C3BD00, 80CCB068, F9071E18) >0240FFC0 0040103D (00000000, 00000000, 7FFDF000, 7FFDF000) >0240FFF0 77F1BA3C (00401000, 00000000, 00000000, 77FA5AB0) >End of stack trace > >I'll try to work out the problem and send a patch, but in >the meantime any pointers will be appreciated. This looks like there was a failure in your dll1_func which appears to be properly loaded into the child. The fix that I added to recent DLLs was only to allow a DLL to load in the same location in the child as it was in the parent, when there were multiple DLLs loaded to the same location. I would not expect this to have any affect on your test case. cgf >forkbug1.c: > > #include > #include > #include > #include > > int main() > { > int child, pid, status; > void *dll1_dll; > void (*dll1_func)(); > > dll1_dll = dlopen("libdll1.dll", RTLD_LAZY); > dll1_func = dlsym(dll1_dll, "dll1_func"); > > if((child = fork()) == 0) { > fprintf(stderr, "in child\n"); > dll1_func("child"); > exit(0); > } > > pid = wait(&status); > fprintf(stderr, "pid=%d status=%d\n", pid, status); > dll1_func("parent"); > > return 0; > } > >libdll1.c: > > #include > > #define DLLIMPORT __declspec (dllexport) > > DLLIMPORT int > dll1_func(char *msg) > { > fprintf(stderr, "dll1_func=%s\n", msg); > return 1; > } > >Makefile: > > CFLAGS = -g -Wall > LDFLAGS = -g > > all: libdll1.dll forkbug1 > > forkbug1: forkbug1.o > $(CC) $(LDFLAGS) -o forkbug1 forkbug1.o > > %.dll: %.o > dllwrap --export-all --output-def $*.def \ > --output-lib $*.a -o $@ $< -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com