The winstation spinlock is a leftover of some old code. It can be removed.
<+smiley1_> hbelusca: yeah the spinlock should be removed
<@hbelusca> smiley1_ - was it from old code?
<+smiley1_> hbelusca: go on

svn path=/trunk/; revision=63612
This commit is contained in:
Hermès Bélusca-Maïto 2014-06-17 20:51:04 +00:00
parent df0cd9c93d
commit ecf5e374ef
2 changed files with 1 additions and 36 deletions

View file

@ -451,9 +451,6 @@ NtUserCreateWindowStation(
/* Initialize the window station */ /* Initialize the window station */
RtlZeroMemory(WindowStationObject, sizeof(WINSTATION_OBJECT)); RtlZeroMemory(WindowStationObject, sizeof(WINSTATION_OBJECT));
#ifdef USE_WINSTA_LOCK
KeInitializeSpinLock(&WindowStationObject->Lock);
#endif
InitializeListHead(&WindowStationObject->DesktopListHead); InitializeListHead(&WindowStationObject->DesktopListHead);
Status = RtlCreateAtomTable(37, &WindowStationObject->AtomTable); Status = RtlCreateAtomTable(37, &WindowStationObject->AtomTable);
WindowStationObject->Name = WindowStationName; WindowStationObject->Name = WindowStationName;
@ -1205,9 +1202,6 @@ BuildDesktopNameList(
{ {
NTSTATUS Status; NTSTATUS Status;
PWINSTATION_OBJECT WindowStation; PWINSTATION_OBJECT WindowStation;
#ifdef USE_WINSTA_LOCK
KIRQL OldLevel;
#endif
PLIST_ENTRY DesktopEntry; PLIST_ENTRY DesktopEntry;
PDESKTOP DesktopObject; PDESKTOP DesktopObject;
DWORD EntryCount; DWORD EntryCount;
@ -1224,10 +1218,6 @@ BuildDesktopNameList(
return Status; return Status;
} }
#ifdef USE_WINSTA_LOCK
KeAcquireSpinLock(&WindowStation->Lock, &OldLevel);
#endif
/* /*
* Count the required size of buffer. * Count the required size of buffer.
*/ */
@ -1248,9 +1238,6 @@ BuildDesktopNameList(
Status = MmCopyToCaller(pRequiredSize, &ReturnLength, sizeof(ULONG)); Status = MmCopyToCaller(pRequiredSize, &ReturnLength, sizeof(ULONG));
if (! NT_SUCCESS(Status)) if (! NT_SUCCESS(Status))
{ {
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return STATUS_BUFFER_TOO_SMALL; return STATUS_BUFFER_TOO_SMALL;
} }
@ -1261,9 +1248,6 @@ BuildDesktopNameList(
*/ */
if (dwSize < ReturnLength) if (dwSize < ReturnLength)
{ {
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return STATUS_BUFFER_TOO_SMALL; return STATUS_BUFFER_TOO_SMALL;
} }
@ -1274,9 +1258,6 @@ BuildDesktopNameList(
Status = MmCopyToCaller(lpBuffer, &EntryCount, sizeof(DWORD)); Status = MmCopyToCaller(lpBuffer, &EntryCount, sizeof(DWORD));
if (! NT_SUCCESS(Status)) if (! NT_SUCCESS(Status))
{ {
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return Status; return Status;
} }
@ -1292,9 +1273,6 @@ BuildDesktopNameList(
Status = MmCopyToCaller(lpBuffer, DesktopName.Buffer, DesktopName.Length); Status = MmCopyToCaller(lpBuffer, DesktopName.Buffer, DesktopName.Length);
if (! NT_SUCCESS(Status)) if (! NT_SUCCESS(Status))
{ {
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return Status; return Status;
} }
@ -1302,9 +1280,6 @@ BuildDesktopNameList(
Status = MmCopyToCaller(lpBuffer, &NullWchar, sizeof(WCHAR)); Status = MmCopyToCaller(lpBuffer, &NullWchar, sizeof(WCHAR));
if (! NT_SUCCESS(Status)) if (! NT_SUCCESS(Status))
{ {
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return Status; return Status;
} }
@ -1312,13 +1287,9 @@ BuildDesktopNameList(
} }
/* /*
* Clean up * Clean up and return
*/ */
#ifdef USE_WINSTA_LOCK
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
#endif
ObDereferenceObject(WindowStation); ObDereferenceObject(WindowStation);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -7,16 +7,10 @@
#define WSS_LOCKED (1) #define WSS_LOCKED (1)
#define WSS_NOINTERACTIVE (2) #define WSS_NOINTERACTIVE (2)
// Uncomment for using WinSta spinlock
// #define USE_WINSTA_LOCK
typedef struct _WINSTATION_OBJECT typedef struct _WINSTATION_OBJECT
{ {
DWORD dwSessionId; DWORD dwSessionId;
#ifdef USE_WINSTA_LOCK
KSPIN_LOCK Lock;
#endif
UNICODE_STRING Name; UNICODE_STRING Name;
LIST_ENTRY DesktopListHead; LIST_ENTRY DesktopListHead;
PRTL_ATOM_TABLE AtomTable; PRTL_ATOM_TABLE AtomTable;