Can you explain, why the variables need to be volatile? This looks like
a SEH problem.
mjmartin(a)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/o…
==============================================================================
--- 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 */