Show
Ignore:
Timestamp:
07/30/08 15:12:45 (5 months ago)
Author:
odole
Message:

merge with webkit revision 35445

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/JavaScriptCore/wtf/ThreadingWin.cpp

    r243 r424  
    7878namespace WTF { 
    7979 
     80// MS_VC_EXCEPTION, THREADNAME_INFO, and setThreadName all come from <http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx>. 
     81static const DWORD MS_VC_EXCEPTION = 0x406D1388; 
     82 
     83#pragma pack(push, 8) 
     84typedef struct tagTHREADNAME_INFO { 
     85    DWORD dwType; // must be 0x1000 
     86    LPCSTR szName; // pointer to name (in user addr space) 
     87    DWORD dwThreadID; // thread ID (-1=caller thread) 
     88    DWORD dwFlags; // reserved for future use, must be zero 
     89} THREADNAME_INFO; 
     90#pragma pack(pop) 
     91 
     92static void setThreadName(DWORD dwThreadID, LPCSTR szThreadName) 
     93{ 
     94    // Visual Studio has a 31-character limit on thread names. Longer names will 
     95    // be truncated silently, but we'd like callers to know about the limit. 
     96    ASSERT_ARG(szThreadName, strlen(szThreadName) <= 31); 
     97 
     98    THREADNAME_INFO info; 
     99    info.dwType = 0x1000; 
     100    info.szName = szThreadName; 
     101    info.dwThreadID = dwThreadID; 
     102    info.dwFlags = 0; 
     103 
     104    __try { 
     105        RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), reinterpret_cast<ULONG_PTR*>(&info)); 
     106    } __except (EXCEPTION_CONTINUE_EXECUTION) { 
     107    } 
     108} 
     109 
    80110Mutex* atomicallyInitializedStaticMutex; 
    81111 
     
    96126        initializeMainThread(); 
    97127        mainThreadIdentifier = currentThread(); 
     128        setThreadName(mainThreadIdentifier, "Main Thread"); 
    98129    } 
    99130} 
     
    146177} 
    147178 
    148 ThreadIdentifier createThread(ThreadFunction entryPoint, void* data
     179ThreadIdentifier createThread(ThreadFunction entryPoint, void* data, const char* threadName
    149180{ 
    150181    unsigned threadIdentifier = 0; 
     
    157188    } 
    158189 
     190    if (threadName) 
     191        setThreadName(threadIdentifier, threadName); 
     192 
    159193    threadID = static_cast<ThreadIdentifier>(threadIdentifier); 
    160194    storeThreadHandleByIdentifier(threadIdentifier, threadHandle); 
    161195 
    162196    return threadID; 
     197} 
     198 
     199// This function is deprecated but needs to be kept around for backward 
     200// compatibility. Use the 3-argument version of createThread above. 
     201ThreadIdentifier createThread(ThreadFunction entryPoint, void* data) 
     202{ 
     203    return createThread(entryPoint, data, 0); 
    163204} 
    164205