Ignore:
Timestamp:
Mar 18, 2012, 12:41:27 AM (13 years ago)
Author:
dmik
Message:

kernel32: Fix stack size interpretation in CreateThread().

It now uses the stack size parameter as a number of bytes to
pre-commit, not as a total stack size, unless
STACK_SIZE_PARAM_IS_A_RESERVATION is set.

Closes #77.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/thread.cpp

    r21953 r21981  
    674674//******************************************************************************
    675675//******************************************************************************
    676 Win32Thread::Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData, DWORD dwFlags, HANDLE hThread)
     676Win32Thread::Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData, DWORD dwFlags, HANDLE hThread, DWORD cbCommitStack)
    677677{
    678678    lpUserData = lpData;
     
    680680    this->dwFlags = dwFlags;
    681681    this->hThread = hThread;
     682    this->cbCommitStack = cbCommitStack;
    682683
    683684    teb = CreateTEB(hThread, 0xFFFFFFFF);
     
    721722
    722723    dprintf(("Stack top 0x%x, stack end 0x%x", winteb->stack_top, winteb->stack_low));
     724
     725    if (me->cbCommitStack) {
     726        // pre-commit part of the stack
     727        PBYTE stack = ((PBYTE) (winteb->stack_top)) - 1;
     728        for (int i = 0; i < (me->cbCommitStack + 0xFFF) / 0x1000; i++) {
     729            BYTE unused = *stack;
     730            unused = unused;
     731            stack -= 0x1000;
     732        }
     733    }
    723734
    724735    if( IsDBCSEnv())
Note: See TracChangeset for help on using the changeset viewer.