| Index: runtime/vm/thread_win.h
|
| ===================================================================
|
| --- runtime/vm/thread_win.h (revision 42893)
|
| +++ runtime/vm/thread_win.h (working copy)
|
| @@ -1,121 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#ifndef VM_THREAD_WIN_H_
|
| -#define VM_THREAD_WIN_H_
|
| -
|
| -#if !defined(VM_THREAD_H_)
|
| -#error Do not include thread_win.h directly; use thread.h instead.
|
| -#endif
|
| -
|
| -#include "platform/assert.h"
|
| -#include "platform/globals.h"
|
| -
|
| -namespace dart {
|
| -
|
| -typedef DWORD ThreadLocalKey;
|
| -typedef DWORD ThreadId;
|
| -
|
| -
|
| -class ThreadInlineImpl {
|
| - private:
|
| - ThreadInlineImpl() {}
|
| - ~ThreadInlineImpl() {}
|
| -
|
| - static uword GetThreadLocal(ThreadLocalKey key) {
|
| - static ThreadLocalKey kUnsetThreadLocalKey = TLS_OUT_OF_INDEXES;
|
| - ASSERT(key != kUnsetThreadLocalKey);
|
| - return reinterpret_cast<uword>(TlsGetValue(key));
|
| - }
|
| -
|
| - friend class Thread;
|
| - friend unsigned int __stdcall ThreadEntry(void* data_ptr);
|
| -
|
| - DISALLOW_ALLOCATION();
|
| - DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
|
| -};
|
| -
|
| -
|
| -class MutexData {
|
| - private:
|
| - MutexData() {}
|
| - ~MutexData() {}
|
| -
|
| - HANDLE semaphore_;
|
| -
|
| - friend class Mutex;
|
| -
|
| - DISALLOW_ALLOCATION();
|
| - DISALLOW_COPY_AND_ASSIGN(MutexData);
|
| -};
|
| -
|
| -
|
| -class MonitorWaitData {
|
| - public:
|
| - static void ThreadExit();
|
| -
|
| - private:
|
| - explicit MonitorWaitData(HANDLE event) : event_(event), next_(NULL) {}
|
| - ~MonitorWaitData() {
|
| - CloseHandle(event_);
|
| - ASSERT(next_ == NULL);
|
| - }
|
| -
|
| - // ThreadLocalKey used to fetch and store the MonitorWaitData object
|
| - // for a given thread.
|
| - static ThreadLocalKey monitor_wait_data_key_;
|
| -
|
| - // Auto-reset event used for waiting.
|
| - HANDLE event_;
|
| - // Link to next element in the singly-linked list of waiters.
|
| - MonitorWaitData* next_;
|
| -
|
| - friend class Monitor;
|
| - friend class MonitorData;
|
| - friend class OS;
|
| -
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MonitorWaitData);
|
| -};
|
| -
|
| -
|
| -class MonitorData {
|
| - private:
|
| - MonitorData() {}
|
| - ~MonitorData() {}
|
| -
|
| - // Helper methods to manipulate the list of waiters for this
|
| - // monitor.
|
| - void AddWaiter(MonitorWaitData* wait_data);
|
| - void RemoveWaiter(MonitorWaitData* wait_data);
|
| - void SignalAndRemoveFirstWaiter();
|
| - void SignalAndRemoveAllWaiters();
|
| - static MonitorWaitData* GetMonitorWaitDataForThread();
|
| -
|
| - // The external critical section for the monitor.
|
| - CRITICAL_SECTION cs_;
|
| -
|
| - // Condition variables are only available since Windows Vista. To
|
| - // support at least Windows XP, we implement our own condition
|
| - // variables using SetEvent on Event objects.
|
| -
|
| - // Singly-linked list of event objects, one for each thread waiting
|
| - // on this monitor. New waiters are added at the end of the list.
|
| - // Notify signals the first element of the list (FIFO
|
| - // order). NotifyAll, signals all the elements of the list.
|
| - CRITICAL_SECTION waiters_cs_;
|
| - MonitorWaitData* waiters_head_;
|
| - MonitorWaitData* waiters_tail_;
|
| -
|
| - friend class Monitor;
|
| - friend class OS;
|
| - friend unsigned int __stdcall ThreadEntry(void* data_ptr);
|
| -
|
| - DISALLOW_ALLOCATION();
|
| - DISALLOW_COPY_AND_ASSIGN(MonitorData);
|
| -};
|
| -
|
| -} // namespace dart
|
| -
|
| -#endif // VM_THREAD_WIN_H_
|
|
|