[ros-dev] [ros-diffs] [mjmartin] 40557: - Add volatile to variables in OutputDebugStringA. Fix #1 of ? for 3424.

Timo Kreuzer timo.kreuzer at web.de
Sat Apr 18 12:36:31 CEST 2009


Can you explain, why the variables need to be volatile? This looks like
a SEH problem.

mjmartin at svn.reactos.org schrieb:
> Author: mjmartin
> Date: Fri Apr 17 13:59:03 2009
> New Revision: 40557
>
> URL: http://svn.reactos.org/svn/reactos?rev=40557&view=rev
> Log:
> - Add volatile to variables in OutputDebugStringA. Fix #1 of ? for 3424.
>
> Modified:
>     trunk/reactos/dll/win32/kernel32/debug/output.c
>
> Modified: trunk/reactos/dll/win32/kernel32/debug/output.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/debug/output.c?rev=40557&r1=40556&r2=40557&view=diff
> ==============================================================================
> --- trunk/reactos/dll/win32/kernel32/debug/output.c [iso-8859-1] (original)
> +++ trunk/reactos/dll/win32/kernel32/debug/output.c [iso-8859-1] Fri Apr 17 13:59:03 2009
> @@ -219,9 +219,9 @@
>  		static BOOL s_bDBMonMutexTriedOpen = FALSE;
>  
>  		/* local copy of the mutex handle */
> -		HANDLE hDBMonMutex = s_hDBMonMutex;
> +		volatile HANDLE hDBMonMutex = s_hDBMonMutex;
>  		/* handle to the Section of the shared buffer */
> -		HANDLE hDBMonBuffer = NULL;
> +		volatile HANDLE hDBMonBuffer = NULL;
>  
>  		/* pointer to the mapped view of the shared buffer. It consist of the current
>  		   process id followed by the message string */
> @@ -229,11 +229,11 @@
>  
>  		/* event: signaled by the debug message monitor when OutputDebugString can write
>  		   to the shared buffer */
> -		HANDLE hDBMonBufferReady = NULL;
> +		volatile HANDLE hDBMonBufferReady = NULL;
>  
>  		/* event: to be signaled by OutputDebugString when it's done writing to the
>  		   shared buffer */
> -		HANDLE hDBMonDataReady = NULL;
> +		volatile HANDLE hDBMonDataReady = NULL;
>  
>  		/* mutex not opened, and no previous attempts to open/create it */
>  		if(hDBMonMutex == NULL && !s_bDBMonMutexTriedOpen)
> @@ -295,10 +295,10 @@
>  			_SEH2_TRY
>  			{
>  				/* size of the current output block */
> -				SIZE_T nRoundLen;
> +				volatile SIZE_T nRoundLen;
>  
>  				/* size of the remainder of the string */
> -				SIZE_T nOutputStringLen;
> +				volatile SIZE_T nOutputStringLen;
>  
>  				/* output the whole string */
>  				nOutputStringLen = strlen(_OutputString);
> @@ -339,11 +339,12 @@
>  					else
>  					{
>  						/* output in blocks of 512 characters */
> -						CHAR a_cBuffer[512];
> +						volatile PCHAR a_cBuffer;
> +						a_cBuffer = (CHAR*)HeapAlloc(GetProcessHeap(), 0, 512);
>  
>  						/* write a maximum of 511 bytes */
> -						if(nOutputStringLen > (sizeof(a_cBuffer) - 2))
> -							nRoundLen = sizeof(a_cBuffer) - 2;
> +						if(nOutputStringLen > 510)
> +							nRoundLen = 510;
>  						else
>  							nRoundLen = nOutputStringLen;
>  
> @@ -355,6 +356,8 @@
>  
>  						/* send the current block to the kernel debugger */
>  						DbgPrint("%s", a_cBuffer);
> +
> +						HeapFree(GetProcessHeap(), 0, a_cBuffer);
>  					}
>  
>  					/* move to the next block */
>
>
>   



More information about the Ros-dev mailing list