mirror of
https://github.com/bb107/MemoryModulePP
synced 2026-06-08 13:15:33 +00:00
@@ -3,6 +3,7 @@
|
||||
#include "MmpTlsFiber.h"
|
||||
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
||||
typedef struct _MMP_POSTPONED_TLS {
|
||||
|
||||
@@ -31,8 +32,7 @@ DWORD WINAPI MmpReleasePostponedTlsWorker(PVOID) {
|
||||
auto iter = MmpPostponedTlsList->begin();
|
||||
|
||||
while (iter != MmpPostponedTlsList->end()) {
|
||||
const auto& item = *iter;
|
||||
GetExitCodeThread(item.hThread, &code);
|
||||
GetExitCodeThread(iter->hThread, &code);
|
||||
|
||||
if (code == STILL_ACTIVE) {
|
||||
++iter;
|
||||
@@ -41,7 +41,7 @@ DWORD WINAPI MmpReleasePostponedTlsWorker(PVOID) {
|
||||
|
||||
RtlAcquireSRWLockExclusive(&MmpGlobalDataPtr->MmpTls->MmpTlsListLock);
|
||||
|
||||
auto TlspMmpBlock = (PVOID*)item.lpOldTlsVector->ModuleTlsData;
|
||||
auto TlspMmpBlock = (PVOID*)iter->lpOldTlsVector->ModuleTlsData;
|
||||
auto entry = MmpGlobalDataPtr->MmpTls->MmpTlsList.Flink;
|
||||
while (entry != &MmpGlobalDataPtr->MmpTls->MmpTlsList) {
|
||||
|
||||
@@ -51,13 +51,13 @@ DWORD WINAPI MmpReleasePostponedTlsWorker(PVOID) {
|
||||
entry = entry->Flink;
|
||||
}
|
||||
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, CONTAINING_RECORD(item.lpTlsRecord->TlspLdrBlock, TLS_VECTOR, TLS_VECTOR::ModuleTlsData));
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, item.lpTlsRecord);
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, item.lpOldTlsVector);
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, CONTAINING_RECORD(iter->lpTlsRecord->TlspLdrBlock, TLS_VECTOR, TLS_VECTOR::ModuleTlsData));
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, iter->lpTlsRecord);
|
||||
RtlFreeHeap(RtlProcessHeap(), 0, iter->lpOldTlsVector);
|
||||
|
||||
RtlReleaseSRWLockExclusive(&MmpGlobalDataPtr->MmpTls->MmpTlsListLock);
|
||||
|
||||
CloseHandle(item.hThread);
|
||||
CloseHandle(iter->hThread);
|
||||
iter = MmpPostponedTlsList->erase(iter);
|
||||
}
|
||||
|
||||
@@ -95,6 +95,7 @@ VOID WINAPI MmpQueuePostponedTls(PMMP_TLSP_RECORD record) {
|
||||
);
|
||||
|
||||
item.lpOldTlsVector = MmpAllocateTlsp();
|
||||
assert(item.lpOldTlsVector);
|
||||
|
||||
item.lpTlsRecord = record;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user