From: Etaash Mathamsetty <etaash.mathamsetty(a)gmail.com> --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 0a484829ca3..23770e54367 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -167,7 +167,7 @@ @ stub ExInterlockedExtendZone @ stub ExInterlockedIncrementLong @ stub ExInterlockedInsertHeadList -@ stub ExInterlockedInsertTailList +@ stdcall ExInterlockedInsertTailList(ptr ptr ptr) @ stub ExInterlockedPopEntryList @ stub ExInterlockedPushEntryList @ stdcall ExInterlockedRemoveHeadList(ptr ptr) diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index d9b5726b920..dc0453c4323 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -778,6 +778,31 @@ LIST_ENTRY * WINAPI ExInterlockedRemoveHeadList( LIST_ENTRY *list, KSPIN_LOCK *l return ret; } +/*********************************************************************** + * ExInterlockedInsertTailList (NTOSKRNL.EXE.@) + */ +PLIST_ENTRY WINAPI ExInterlockedInsertTailList( PLIST_ENTRY head, PLIST_ENTRY entry, PKSPIN_LOCK lock ) +{ + PLIST_ENTRY ret; + KIRQL irql; + + TRACE( "(%p %p %p)\n", head, entry, lock ); + + KeAcquireSpinLock( lock, &irql ); + + if ( IsListEmpty(head) || !head || !entry || !lock ) + { + KeReleaseSpinLock( lock, irql ); + return NULL; + } + + ret = head->Blink; + InsertTailList( head, entry ); + + KeReleaseSpinLock( lock, irql ); + + return ret; +} /*********************************************************************** * InterlockedPopEntrySList (NTOSKRNL.EXE.@) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1282