initial import
[vuplus_webkit] / Source / JavaScriptCore / heap / MachineStackMarker.h
1 /*
2  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
3  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
4  *  Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5  *
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Lesser General Public
8  *  License as published by the Free Software Foundation; either
9  *  version 2 of the License, or (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  *  Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public
17  *  License along with this library; if not, write to the Free Software
18  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21
22 #ifndef MachineThreads_h
23 #define MachineThreads_h
24
25 #include <wtf/Noncopyable.h>
26 #include <wtf/ThreadingPrimitives.h>
27
28 #if ENABLE(JSC_MULTIPLE_THREADS)
29 #include <pthread.h>
30 #endif
31
32 namespace JSC {
33
34     class Heap;
35     class ConservativeRoots;
36
37     class MachineThreads {
38         WTF_MAKE_NONCOPYABLE(MachineThreads);
39     public:
40         MachineThreads(Heap*);
41         ~MachineThreads();
42
43         void gatherConservativeRoots(ConservativeRoots&, void* stackCurrent);
44
45 #if ENABLE(JSC_MULTIPLE_THREADS)
46         void makeUsableFromMultipleThreads();
47         void addCurrentThread(); // Only needs to be called by clients that can use the same heap from multiple threads.
48 #endif
49
50     private:
51         void gatherFromCurrentThread(ConservativeRoots&, void* stackCurrent);
52
53 #if ENABLE(JSC_MULTIPLE_THREADS)
54         class Thread;
55
56         static void removeThread(void*);
57         void removeCurrentThread();
58
59         void gatherFromOtherThread(ConservativeRoots&, Thread*);
60 #endif
61
62         Heap* m_heap;
63
64 #if ENABLE(JSC_MULTIPLE_THREADS)
65         Mutex m_registeredThreadsMutex;
66         Thread* m_registeredThreads;
67         pthread_key_t m_threadSpecific;
68 #endif
69     };
70
71 } // namespace JSC
72
73 #endif // MachineThreads_h