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 |
|
---|
30 | namespace WTF {
|
---|
31 |
|
---|
32 | long& tlsKeyCount()
|
---|
33 | {
|
---|
34 | static long count;
|
---|
35 | return count;
|
---|
36 | }
|
---|
37 |
|
---|
38 | DWORD* tlsKeys()
|
---|
39 | {
|
---|
40 | static DWORD keys[kMaxTlsKeySize];
|
---|
41 | return keys;
|
---|
42 | }
|
---|
43 |
|
---|
44 | void 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.