$NetBSD: patch-ag,v 1.6 2007/02/18 11:40:10 wiz Exp $ --- pth_lib.c.orig 2006-06-08 17:54:03.000000000 +0000 +++ pth_lib.c @@ -37,10 +37,11 @@ long pth_version(void) /* implicit initialization support */ intern int pth_initialized = FALSE; +intern int pth_explicit_initialize = FALSE; #if cpp #define pth_implicit_init() \ if (!pth_initialized) \ - pth_init(); + pth__init(); #endif #ifdef PTH_EX @@ -55,19 +56,13 @@ static void pth_ex_terminate(ex_t *ex) } #endif -/* initialize the package */ -int pth_init(void) +int pth__init(void) { pth_attr_t t_attr; - /* support for implicit initialization calls - and to prevent multiple explict initialization, too */ - if (pth_initialized) - return pth_error(FALSE, EPERM); - else - pth_initialized = TRUE; + pth_initialized = TRUE; - pth_debug1("pth_init: enter"); + pth_debug1("pth__init: enter"); /* initialize syscall wrapping */ pth_syscall_init(); @@ -131,10 +126,29 @@ int pth_init(void) pth_mctx_switch(&pth_main->mctx, &pth_sched->mctx); /* came back, so let's go home... */ - pth_debug1("pth_init: leave"); + pth_debug1("pth__init: leave"); return TRUE; } +/* initialize the package */ +int pth_init(void) +{ + int rv; + + /* support for implicit initialization calls + and to prevent multiple explict initialization, too */ + if (pth_initialized) { + /* if we've already explicitly initialized then error */ + if (pth_explicit_initialize) + return pth_error(FALSE, EPERM); + rv = TRUE; + } else { + rv = pth__init(); + pth_explicit_initialize = TRUE; + } + return rv; +} + /* kill the package internals */ int pth_kill(void) { @@ -146,6 +160,7 @@ int pth_kill(void) pth_thread_cleanup(pth_main); pth_scheduler_kill(); pth_initialized = FALSE; + pth_explicit_initialize = FALSE; pth_tcb_free(pth_sched); pth_tcb_free(pth_main); pth_syscall_kill();