source: webkit/trunk/JavaScriptCore/wtf/ThreadSpecificWin.cpp@ 45011

Last change on this file since 45011 was 41594, checked in by Adam Roben, 16 years ago

Change the Windows implementation of ThreadSpecific to use functions instead of extern globals

This will make it easier to export ThreadSpecific from WebKit.

Reviewed by John Sullivan.

  • API/JSBase.cpp: (JSEvaluateScript): Touched this file to force ThreadSpecific.h to be copied into $WebKitOutputDir.
  • wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() and g_tls_keys with tlsKeys().

(WTF::::ThreadSpecific):
(WTF::::~ThreadSpecific):
(WTF::::get):
(WTF::::set):
(WTF::::destroy):
Updated to use the new functions.

  • wtf/ThreadSpecificWin.cpp: (WTF::tlsKeyCount): (WTF::tlsKeys): Added.

(WTF::ThreadSpecificThreadExit): Changed to use the new functions.

  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1/*
2 * Copyright (C) 2009 Jian Li <[email protected]>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 *
19 */
20
21#include "config.h"
22
23#include "ThreadSpecific.h"
24#include <wtf/Noncopyable.h>
25
26#if USE(PTHREADS)
27#error This file should not be compiled by ports that do not use Windows native ThreadSpecific implementation.
28#endif
29
30namespace WTF {
31
32long& tlsKeyCount()
33{
34 static long count;
35 return count;
36}
37
38DWORD* tlsKeys()
39{
40 static DWORD keys[kMaxTlsKeySize];
41 return keys;
42}
43
44void ThreadSpecificThreadExit()
45{
46 for (long i = 0; i < tlsKeyCount(); i++) {
47 // The layout of ThreadSpecific<T>::Data does not depend on T. So we are safe to do the static cast to ThreadSpecific<int> in order to access its data member.
48 ThreadSpecific<int>::Data* data = static_cast<ThreadSpecific<int>::Data*>(TlsGetValue(tlsKeys()[i]));
49 if (data)
50 data->destructor(data);
51 }
52}
53
54} // namespace WTF
Note: See TracBrowser for help on using the repository browser.