diff options
Diffstat (limited to 'tls.c')
| -rw-r--r-- | tls.c | 113 | 
1 files changed, 113 insertions, 0 deletions
@@ -0,0 +1,113 @@ +/* +   +----------------------------------------------------------------------+ +   | PHP HTML Embedded Scripting Language Version 3.0                     | +   +----------------------------------------------------------------------+ +   | Copyright (c) 1997,1998 PHP Development Team (See Credits file)      | +   +----------------------------------------------------------------------+ +   | This program is free software; you can redistribute it and/or modify | +   | it under the terms of one of the following licenses:                 | +   |                                                                      | +   |  A) the GNU General Public License as published by the Free Software | +   |     Foundation; either version 2 of the License, or (at your option) | +   |     any later version.                                               | +   |                                                                      | +   |  B) the PHP License as published by the PHP Development Team and     | +   |     included in the distribution in the file: LICENSE                | +   |                                                                      | +   | This program is distributed in the hope that it will be useful,      | +   | but WITHOUT ANY WARRANTY; without even the implied warranty of       | +   | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        | +   | GNU General Public License for more details.                         | +   |                                                                      | +   | You should have received a copy of both licenses referred to here.   | +   | If you did not, or have any questions about PHP licensing, please    | +   | contact core@php.net.                                                | +   +----------------------------------------------------------------------+ +   | Authors:                                                             | +   |                                                                      | +   +----------------------------------------------------------------------+ + */ +#include "tls.h" + +#if THREAD_SAFE +/*This is indeed a global!*/ +DWORD TlsIndex; +#else +php3_globals_struct *php3_globals;  +#endif + +/* just copying from some samples, can replace this with +standard php error messaging */ +VOID ErrorExit (LPTSTR lpszMessage)  +{  +   fprintf(stderr, "%s\n", lpszMessage);  +   ExitProcess(0);  +}  + +/*all these functions are called from DllMain() +  in a NON thread safe version, tls_startup and +  tls_shutdown should be initiated before anything +  else.  This will allocate memory for globals. + +  called at dll load*/ +int tls_startup(void){ +#if THREAD_SAFE +	if ((TlsIndex=TlsAlloc())==0xFFFFFFFF){ +		return 0; +	} +#else +	php3_globals=malloc(sizeof(php3_globals)); +#endif +	return 1; +} +/*called at dll unload*/ +int tls_shutdown(void){ +#if THREAD_SAFE +	if (!TlsFree(TlsIndex)){ +		return 0; +	} +#else +	free(php3_globals); +#endif +	return 1; +} +  +#if THREAD_SAFE +/*called at start of thread*/ +int tls_create(void){ +	php3_globals_struct *php3_globals; +	php3_globals = (php3_globals_struct *) LocalAlloc(LPTR, sizeof(php3_globals_struct));  +	if (! TlsSetValue(TlsIndex, (void *) php3_globals))  +		ErrorExit("TlsSetValue error");  + +	return 1; +} + +/*called at end of thread*/ +int tls_destroy(void){ +	php3_globals_struct *php3_globals; +	php3_globals = TlsGetValue(TlsIndex);  +	if (php3_globals != 0)  +		LocalFree((HLOCAL) php3_globals);  +	return 1; +} + +#endif + + +/* +accessing data inside a thread +This short function shows how the global struct +is accessed in a function.  THREAD_SAFE should +only need to be defined on windows server modules + +void thread_safe_access_of_globals(VOID)  +{  +	TLS_VARS; + +	if ((php3_globals == 0) && (GetLastError() != 0)) { +		ErrorExit("TlsGetValue error"); +	} +}  + +*/  | 
