--- internet.xs.old 2008-04-15 20:01:52.000000000 -0400 +++ internet.xs 2010-10-05 03:18:24.609375000 -0400 @@ -57,7 +57,7 @@ // VALUES FILLED IN BY PerlCallback DWORD status = -1; - +static PerlInterpreter *myWin32InternetPerlInterpreterPtr; static time_t ft2timet(FILETIME *ft) { SYSTEMTIME st; @@ -824,7 +824,22 @@ // ;) // if(mystatus!=status) { - dSP; + SV **sp; + void * myptr; + printf("PerlCallback: entering\n"); + printf("PerlCallback: got context=%d mystatus=%d\n",context,mystatus); + printf("PerlCallback: myWin32InternetPerlInterpreterPtr=%p\n",myWin32InternetPerlInterpreterPtr); + + //comment below out to trigger original crash/bug in Win32::Internet and recompile + PERL_SET_CONTEXT(myWin32InternetPerlInterpreterPtr); + + printf("PerlCallback: ThreadId=%d\n",GetCurrentThreadId()); + printf("PerlCallback: GetLastError() =%d\n",GetLastError()); + myptr = PERL_GET_CONTEXT; + printf("PerlCallback: GetLastError() =%d\n",GetLastError()); + printf("PerlCallback: pointer from Perl_get_context() =%p\n",myptr); + //can't use dSP because we are after variable declarations + sp = PL_stack_sp; ENTER; SAVETMPS; PUSHMARK(sp); @@ -889,6 +904,7 @@ LPCTSTR proxybypass DWORD flags CODE: + myWin32InternetPerlInterpreterPtr = my_perl; RETVAL = InternetOpen(agent,type,proxy,proxybypass,flags); OUTPUT: RETVAL