}
}
-#ifdef PERL_OBJECT
-
EXTERN_C PerlInterpreter*
perl_alloc_override(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
struct IPerlProc** ppProc)
{
PerlInterpreter *my_perl = NULL;
- try
- {
- CPerlHost* pHost = new CPerlHost(ppMem, ppMemShared, ppMemParse, ppEnv,
- ppStdIO, ppLIO, ppDir, ppSock, ppProc);
-
- if (pHost) {
- my_perl = perl_alloc_using(pHost->m_pHostperlMem,
- pHost->m_pHostperlMemShared,
- pHost->m_pHostperlMemParse,
- pHost->m_pHostperlEnv,
- pHost->m_pHostperlStdIO,
- pHost->m_pHostperlLIO,
- pHost->m_pHostperlDir,
- pHost->m_pHostperlSock,
- pHost->m_pHostperlProc);
- if (my_perl) {
- CPerlObj* pPerl = (CPerlObj*)my_perl;
- w32_internal_host = pHost;
- }
+ CPerlHost* pHost = new CPerlHost(ppMem, ppMemShared, ppMemParse, ppEnv,
+ ppStdIO, ppLIO, ppDir, ppSock, ppProc);
+
+ if (pHost) {
+ my_perl = perl_alloc_using(pHost->m_pHostperlMem,
+ pHost->m_pHostperlMemShared,
+ pHost->m_pHostperlMemParse,
+ pHost->m_pHostperlEnv,
+ pHost->m_pHostperlStdIO,
+ pHost->m_pHostperlLIO,
+ pHost->m_pHostperlDir,
+ pHost->m_pHostperlSock,
+ pHost->m_pHostperlProc);
+ if (my_perl) {
+#ifdef PERL_OBJECT
+ CPerlObj* pPerl = (CPerlObj*)my_perl;
+#endif
+ w32_internal_host = pHost;
}
}
- catch(...)
- {
- win32_fprintf(stderr, "%s\n", "Error: Unable to allocate memory");
- my_perl = NULL;
- }
-
return my_perl;
}
perl_alloc(void)
{
PerlInterpreter* my_perl = NULL;
- try
- {
- CPerlHost* pHost = new CPerlHost();
- if (pHost) {
- my_perl = perl_alloc_using(pHost->m_pHostperlMem,
- pHost->m_pHostperlMemShared,
- pHost->m_pHostperlMemParse,
- pHost->m_pHostperlEnv,
- pHost->m_pHostperlStdIO,
- pHost->m_pHostperlLIO,
- pHost->m_pHostperlDir,
- pHost->m_pHostperlSock,
- pHost->m_pHostperlProc);
- if (my_perl) {
- CPerlObj* pPerl = (CPerlObj*)my_perl;
- w32_internal_host = pHost;
- }
+ CPerlHost* pHost = new CPerlHost();
+ if (pHost) {
+ my_perl = perl_alloc_using(pHost->m_pHostperlMem,
+ pHost->m_pHostperlMemShared,
+ pHost->m_pHostperlMemParse,
+ pHost->m_pHostperlEnv,
+ pHost->m_pHostperlStdIO,
+ pHost->m_pHostperlLIO,
+ pHost->m_pHostperlDir,
+ pHost->m_pHostperlSock,
+ pHost->m_pHostperlProc);
+ if (my_perl) {
+#ifdef PERL_OBJECT
+ CPerlObj* pPerl = (CPerlObj*)my_perl;
+#endif
+ w32_internal_host = pHost;
}
}
- catch(...)
- {
- win32_fprintf(stderr, "%s\n", "Error: Unable to allocate memory");
- my_perl = NULL;
- }
-
return my_perl;
}
+#ifdef PERL_OBJECT
+
EXTERN_C void
perl_construct(PerlInterpreter* my_perl)
{
CPerlHost* pHost = (CPerlHost*)w32_internal_host;
Perl_free();
delete pHost;
- SetPerlInterpreter(NULL);
+ PERL_SET_THX(NULL);
}
}
{
}
#endif
- SetPerlInterpreter(NULL);
+ PERL_SET_THX(NULL);
}
EXTERN_C int
#undef PL_perl_destruct_level
#define PL_perl_destruct_level int dummy
-#else /* !PERL_OBJECT */
-
-EXTERN_C PerlInterpreter*
-perl_alloc(void)
-{
- PerlInterpreter *my_perl = NULL;
- CPerlHost* pHost = new CPerlHost();
- if (pHost) {
- my_perl = perl_alloc_using(pHost->m_pHostperlMem,
- pHost->m_pHostperlMemShared,
- pHost->m_pHostperlMemParse,
- pHost->m_pHostperlEnv,
- pHost->m_pHostperlStdIO,
- pHost->m_pHostperlLIO,
- pHost->m_pHostperlDir,
- pHost->m_pHostperlSock,
- pHost->m_pHostperlProc);
- if (my_perl) {
- w32_internal_host = pHost;
- }
- }
- return my_perl;
-}
-
#endif /* PERL_OBJECT */
#endif /* PERL_IMPLICIT_SYS */
EXTERN_C HANDLE w32_perldll_handle;
-static DWORD g_TlsAllocIndex;
-
-EXTERN_C DllExport bool
-SetPerlInterpreter(void *interp)
-{
- return TlsSetValue(g_TlsAllocIndex, interp);
-}
-
-EXTERN_C DllExport void*
-GetPerlInterpreter(void)
-{
- return TlsGetValue(g_TlsAllocIndex);
-}
-
EXTERN_C DllExport int
RunPerl(int argc, char **argv, char **env)
{
new_perl = perl_clone(my_perl, 1);
# endif
exitstatus = perl_run( new_perl );
- SetPerlInterpreter(my_perl);
+ PERL_SET_THX(my_perl);
#else
exitstatus = perl_run( my_perl );
#endif
perl_free( my_perl );
#ifdef USE_ITHREADS
if (new_perl) {
- SetPerlInterpreter(new_perl);
+ PERL_SET_THX(new_perl);
perl_destruct(new_perl);
perl_free(new_perl);
}
setmode( fileno( stderr ), O_BINARY );
_fmode = O_BINARY;
#endif
- g_TlsAllocIndex = TlsAlloc();
- DisableThreadLibraryCalls(hModule);
+ DisableThreadLibraryCalls((HMODULE)hModule);
w32_perldll_handle = hModule;
break;
* process termination or call to FreeLibrary.
*/
case DLL_PROCESS_DETACH:
- TlsFree(g_TlsAllocIndex);
break;
/* The attached process creates a new thread. */