Author: cgutman
Date: Fri Dec 28 00:36:28 2012
New Revision: 58022
URL: http://svn.reactos.org/svn/reactos?rev=58022&view=rev
Log:
- Never queue a DPC for MiniportHandleInterrupt regardless of what MiniportISR requests if MiniportInitialize is executing
- Very likely fixes CORE-6064
Modified:
trunk/reactos/drivers/network/ndis/ndis/io.c
Modified: trunk/reactos/drivers/network/ndis/ndis/io.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/…
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] Fri Dec 28 00:36:28 2012
@@ -62,11 +62,16 @@
BOOLEAN QueueMiniportHandleInterrupt = FALSE;
PNDIS_MINIPORT_INTERRUPT NdisInterrupt = ServiceContext;
PNDIS_MINIPORT_BLOCK NdisMiniportBlock = NdisInterrupt->Miniport;
+ BOOLEAN Initializing;
NDIS_DbgPrint(MAX_TRACE, ("Called. Interrupt (0x%X)\n", NdisInterrupt));
- /* FIXME: This probably isn't the right check for MiniportInitialize, but we need to see what Windows uses here */
- if ((NdisMiniportBlock->PnPDeviceState != NdisPnPDeviceStarted) || (NdisInterrupt->IsrRequested)) {
+ /* Certain behavior differs if MiniportInitialize is executing when the interrupt is generated */
+ Initializing = (NdisMiniportBlock->PnPDeviceState != NdisPnPDeviceStarted);
+ NDIS_DbgPrint(MAX_TRACE, ("MiniportInitialize executing: %s\n", (Initializing ? "yes" : "no")));
+
+ /* MiniportISR is always called for interrupts during MiniportInitialize */
+ if ((Initializing) || (NdisInterrupt->IsrRequested)) {
NDIS_DbgPrint(MAX_TRACE, ("Calling MiniportISR\n"));
(*NdisMiniportBlock->DriverHandle->MiniportCharacteristics.ISRHandler)(
&InterruptRecognized,
@@ -81,8 +86,8 @@
InterruptRecognized = TRUE;
}
-
- if (QueueMiniportHandleInterrupt)
+ /* MiniportHandleInterrupt is never called for an interrupt during MiniportInitialize */
+ if ((QueueMiniportHandleInterrupt) && (!Initializing))
{
NDIS_DbgPrint(MAX_TRACE, ("Queuing DPC.\n"));
KeInsertQueueDpc(&NdisInterrupt->InterruptDpc, NULL, NULL);
Author: hbelusca
Date: Wed Dec 26 19:26:08 2012
New Revision: 58016
URL: http://svn.reactos.org/svn/reactos?rev=58016&view=rev
Log:
[MSVCRT]
Export __crtLCMapStringW and correct __crtLCMapStringA: their prototypes are :
int CDECL __crtLCMapStringW(LCID lcid, DWORD mapflags, const wchar_t *src,
int srclen, wchar_t *dst, int dstlen, unsigned int codepage, int xflag)
and
int CDECL __crtLCMapStringA(LCID lcid, DWORD mapflags, const char* src,
int srclen, char* dst, int dstlen, unsigned int codepage, int xflag)
Needed by SVN.
Modified:
trunk/reactos/dll/win32/msvcrt/msvcrt.spec
Modified: trunk/reactos/dll/win32/msvcrt/msvcrt.spec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/msvcrt.sp…
==============================================================================
--- trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] Wed Dec 26 19:26:08 2012
@@ -143,8 +143,8 @@
@ cdecl __crtCompareStringW(long long wstr long wstr long) kernel32.CompareStringW
@ cdecl __crtGetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW
@ cdecl __crtGetStringTypeW(long long wstr long ptr)
-@ cdecl __crtLCMapStringA(long long str long ptr long long long)
-# stub __crtLCMapStringW
+@ cdecl __crtLCMapStringA(long long str long str long long long)
+@ cdecl __crtLCMapStringW(long long wstr long wstr long long long)
@ cdecl __daylight() __p__daylight
@ cdecl __dllonexit(ptr ptr ptr)
@ cdecl __doserrno()