Author: sir_richard
Date: Sun May 9 20:06:38 2010
New Revision: 47148
URL: http://svn.reactos.org/svn/reactos?rev=47148&view=rev
Log:
[NTOS]: At times, pages may be removed from the zero or free page list, but without being initialized as part of the PFN database, such that their PageLocation has not changed. However, we can detect these pages because their link pointers will be NULL, meaning they're not _really_ free or zeroed. Use this enhanced check when verifying if a page is in use or not, and additionally triple-check by making sure the reference count is zero. This now matches the Windows checks. We also consider Standby pages (not yet implemented) as usable, since we can always steal them.
Modified:
trunk/reactos/ntoskrnl/mm/freelist.c
Modified: trunk/reactos/ntoskrnl/mm/freelist.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/freelist.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] Sun May 9 20:06:38 2010
@@ -130,10 +130,21 @@
BOOLEAN
NTAPI
+MiIsPfnFree(IN PMMPFN Pfn1)
+{
+ /* Must be a free or zero page, with no references, linked */
+ return ((Pfn1->u3.e1.PageLocation <= StandbyPageList) &&
+ (Pfn1->u1.Flink) &&
+ (Pfn1->u2.Blink) &&
+ !(Pfn1->u3.e2.ReferenceCount));
+}
+
+BOOLEAN
+NTAPI
MiIsPfnInUse(IN PMMPFN Pfn1)
{
- return ((Pfn1->u3.e1.PageLocation != FreePageList) &&
- (Pfn1->u3.e1.PageLocation != ZeroedPageList));
+ /* Standby list or higher, unlinked, and with references */
+ return !MiIsPfnFree(Pfn1);
}
PFN_NUMBER
Author: dreimer
Date: Sun May 9 15:15:33 2010
New Revision: 47145
URL: http://svn.reactos.org/svn/reactos?rev=47145&view=rev
Log:
Bug 5369: Patch and Enhancements for RosBE: Wrong SSVN update behavior.
Partially applied:
- The EOC to skip rosapps and rostests was not applied, because it might be possible that rosapps or rostests need a update anyway.
- Fixed a logical error in %_BUILDBOT_SVNSKIPMAINTRUNK% if condition.
Modified:
trunk/tools/RosBE/RosBE-Windows/Powershell/sSVN.ps1
trunk/tools/RosBE/RosBE-Windows/Root/sSVN.cmd
Modified: trunk/tools/RosBE/RosBE-Windows/Powershell/sSVN.ps1
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Powershe…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Powershell/sSVN.ps1 [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Powershell/sSVN.ps1 [iso-8859-1] Sun May 9 15:15:33 2010
@@ -30,11 +30,27 @@
$_ROSBE_SSVN_JOB = "update"
}
}
+ if ($OFFSVN -eq $ONSVN) {
+ "Your tree is up to date."
+ }
+
if ("$_ROSBE_SSVN_JOB" -eq "update") {
if ("$($arg[1])" -ne "") {
$temparg = $arg[1]
+
+ if ($temparg -eq $OFFSVN) {
+ "Your Local Repository is currently $temparg"
+ }
+ if ($temparg -lt $OFFSVN) {
+ "Downgrading to $temparg ..."
+ }
+ if ($temparg -gt $OFFSVN) {
+ "Updating to $temparg ..."
+ }
if ("$_BUILDBOT_SVNSKIPMAINTRUNK" -ne "1") {
IEX "& svn.exe update -r $temparg"
+ } else {
+ "Skipping ReactOS Trunk update."
}
if (Test-Path "modules\rosapps\.") {
Set-Location "modules\rosapps"
@@ -72,9 +88,6 @@
IEX "& svn.exe log -r $range"
}
}
- }
- if ($OFFSVN -eq $ONSVN) {
- "Your tree is up to date."
}
}
Modified: trunk/tools/RosBE/RosBE-Windows/Root/sSVN.cmd
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Root/sSV…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Root/sSVN.cmd [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Root/sSVN.cmd [iso-8859-1] Sun May 9 15:15:33 2010
@@ -28,7 +28,7 @@
echo This might take a while, so please be patient.
echo.
set _ROSBE_SSVN_JOB=update
- goto :UP
+ goto :UP
)
if /i "%1" == "cleanup" (
@@ -202,10 +202,27 @@
set /p UP="Please enter 'yes' or 'no': "
if /i "!UP!" == "yes" set _ROSBE_SSVN_JOB=update
)
- if "!_ROSBE_SSVN_JOB!" == "update" (
+ )
+ if !OFFSVN! equ !ONSVN! (
+ echo Your tree is up to date.
+ )
+
+ if "!_ROSBE_SSVN_JOB!" == "update" (
if not "%2" == "" (
+
+ if "%2" == "!OFFSVN!" (
+ echo Your Local Repository is currently %2
+ )
+ if "%2" LSS "!OFFSVN!" (
+ echo Downgrading to %2 ...
+ )
+ if "%2" GTR "!OFFSVN!" (
+ echo Updating to %2 ...
+ )
if not "%_BUILDBOT_SVNSKIPMAINTRUNK%" == "1" (
svn.exe update -r %2
+ ) else (
+ echo Skipping ReactOS Trunk update.
)
if exist "modules\rosapps\." (
cd "modules\rosapps"
@@ -243,9 +260,6 @@
svn.exe log -r !OFFSVN!:!ONSVN!
)
)
- if !OFFSVN! equ !ONSVN! (
- echo Your tree is up to date.
- )
goto EOC
Author: jgardou
Date: Sun May 9 15:07:47 2010
New Revision: 47143
URL: http://svn.reactos.org/svn/reactos?rev=47143&view=rev
Log:
[WIN32K]
- remove a comment which is not true anymore
[USER32]
- Create a bitmap which is compatible with the bitmap'we are copying in CreateSmallIcon
Icons are back in taskbar
Modified:
branches/reactos-yarotows/dll/win32/user32/windows/class.c
branches/reactos-yarotows/subsystems/win32/win32k/objects/bitmaps.c
Modified: branches/reactos-yarotows/dll/win32/user32/windows/class.c
URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/user…
==============================================================================
--- branches/reactos-yarotows/dll/win32/user32/windows/class.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/user32/windows/class.c [iso-8859-1] Sun May 9 15:07:47 2010
@@ -289,7 +289,7 @@
}
return Ret;
}
- // Wine Class tests:
+ // Wine Class tests:
/* Edit controls are special - they return a wndproc handle when
GetWindowLongPtr is called with a different A/W.
On the other hand there is no W->A->W conversion so this control
@@ -809,7 +809,6 @@
int SmallIconWidth;
int SmallIconHeight;
BITMAP StdBitmapInfo;
- HDC hInfoDc = NULL;
HDC hSourceDc = NULL;
HDC hDestDc = NULL;
ICONINFO SmallInfo;
@@ -845,15 +844,6 @@
return StdIcon;
}
- /* Get a handle to a info DC and handles to DCs which can be used to
- select a bitmap into. This is done to avoid triggering a switch to
- graphics mode (if we're currently in text/blue screen mode) */
- hInfoDc = CreateICW(NULL, NULL, NULL, NULL);
- if (NULL == hInfoDc)
- {
- ERR("Failed to create info DC\n");
- goto cleanup;
- }
hSourceDc = CreateCompatibleDC(NULL);
if (NULL == hSourceDc)
{
@@ -873,7 +863,7 @@
ERR("Failed to select source color bitmap\n");
goto cleanup;
}
- SmallInfo.hbmColor = CreateCompatibleBitmap(hInfoDc, SmallIconWidth,
+ SmallInfo.hbmColor = CreateCompatibleBitmap(hSourceDc, SmallIconWidth,
SmallIconHeight);
if (NULL == SmallInfo.hbmColor)
{
@@ -899,8 +889,7 @@
ERR("Failed to select source mask bitmap\n");
goto cleanup;
}
- SmallInfo.hbmMask = CreateBitmap(SmallIconWidth, SmallIconHeight, 1, 1,
- NULL);
+ SmallInfo.hbmMask = CreateCompatibleBitmap(hSourceDc, SmallIconWidth, SmallIconHeight);
if (NULL == SmallInfo.hbmMask)
{
ERR("Failed to create mask bitmap\n");
@@ -953,10 +942,6 @@
if (NULL != hSourceDc)
{
DeleteDC(hSourceDc);
- }
- if (NULL != hInfoDc)
- {
- DeleteDC(hInfoDc);
}
return SmallIcon;
@@ -1048,9 +1033,9 @@
clsMenuName.pszClientAnsiMenuName = AnsiMenuName.Buffer;
clsMenuName.pwszClientUnicodeMenuName = MenuName.Buffer;
clsMenuName.pusMenuName = &MenuName;
-
+
Atom = NtUserRegisterClassExWOW( &WndClass,
- &ClassName,
+ &ClassName,
NULL, //PUNICODE_STRING ClsNVersion,
&clsMenuName,
fnID,
Modified: branches/reactos-yarotows/subsystems/win32/win32k/objects/bitmaps.c
URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] Sun May 9 15:07:47 2010
@@ -166,19 +166,6 @@
{
if (Count == sizeof(BITMAP))
{
- /* We have a bitmap bug!!! W/O the HACK, we have white icons.
-
- MSDN Note: When a memory device context is created, it initially
- has a 1-by-1 monochrome bitmap selected into it. If this memory
- device context is used in CreateCompatibleBitmap, the bitmap that
- is created is a monochrome bitmap. To create a color bitmap, use
- the hDC that was used to create the memory device context, as
- shown in the following code:
-
- HDC memDC = CreateCompatibleDC(hDC);
- HBITMAP memBM = CreateCompatibleBitmap(hDC, nWidth, nHeight);
- SelectObject(memDC, memBM);
- */
Bmp = IntGdiCreateBitmap(abs(Width),
abs(Height),
dibs.dsBm.bmPlanes,
Author: mjmartin
Date: Sun May 9 14:27:57 2010
New Revision: 47142
URL: http://svn.reactos.org/svn/reactos?rev=47142&view=rev
Log:
[win32k]
- When message are sent without waiting a reply (non-queued messages) the message queues are referenced and dereferenced in the call.
Message removal and cleanup functions for queues expected a reference on the queue. Add checks to determine if the message is a non-queued message and if so release memory for those that had pointers and more importantly skip dereferencing the queues. Possibly fixes random crashes and memory leaks.
Modified:
trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/nt…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] Sun May 9 14:27:57 2010
@@ -1072,7 +1072,7 @@
{
DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n");
- RemoveEntryList(&SentMessage->ListEntry);
+ RemoveEntryList(&SentMessage->ListEntry);
/* remove the message from the dispatching list */
if(SentMessage->DispatchingListEntry.Flink != NULL)
@@ -1086,9 +1086,19 @@
KeSetEvent(SentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE);
}
- /* dereference our and the sender's message queue */
- IntDereferenceMessageQueue(MessageQueue);
- IntDereferenceMessageQueue(SentMessage->SenderQueue);
+ if (SentMessage->HasPackedLParam == TRUE)
+ {
+ if (SentMessage->Msg.lParam)
+ ExFreePool((PVOID)SentMessage->Msg.lParam);
+ }
+
+ /* Only if it is not a no wait message */
+ if (!(SentMessage->HookMessage & MSQ_SENTNOWAIT))
+ {
+ /* dereference our and the sender's message queue */
+ IntDereferenceMessageQueue(MessageQueue);
+ IntDereferenceMessageQueue(SentMessage->SenderQueue);
+ }
/* free the message */
ExFreePool(SentMessage);
@@ -1509,9 +1519,19 @@
KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE);
}
- /* dereference our and the sender's message queue */
- IntDereferenceMessageQueue(MessageQueue);
- IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
+ if (CurrentSentMessage->HasPackedLParam == TRUE)
+ {
+ if (CurrentSentMessage->Msg.lParam)
+ ExFreePool((PVOID)CurrentSentMessage->Msg.lParam);
+ }
+
+ /* Only if it is not a no wait message */
+ if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT))
+ {
+ /* dereference our and the sender's message queue */
+ IntDereferenceMessageQueue(MessageQueue);
+ IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
+ }
/* free the message */
ExFreePool(CurrentSentMessage);
@@ -1547,10 +1567,19 @@
KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE);
}
- /* dereference our and the sender's message queue */
- IntDereferenceMessageQueue(MessageQueue);
- IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
-
+ if (CurrentSentMessage->HasPackedLParam == TRUE)
+ {
+ if (CurrentSentMessage->Msg.lParam)
+ ExFreePool((PVOID)CurrentSentMessage->Msg.lParam);
+ }
+
+ /* Only if it is not a no wait message */
+ if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT))
+ {
+ /* dereference our and the sender's message queue */
+ IntDereferenceMessageQueue(MessageQueue);
+ IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
+ }
/* free the message */
ExFreePool(CurrentSentMessage);
}