security/sandbox/win/src/win2k_threadpool.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style license that can be
     3 // found in the LICENSE file.
     5 #ifndef SANDBOX_SRC_WIN2K_THREADPOOL_H_
     6 #define SANDBOX_SRC_WIN2K_THREADPOOL_H_
     8 #include <list>
     9 #include <algorithm>
    10 #include "sandbox/win/src/crosscall_server.h"
    12 namespace sandbox {
    14 // Win2kThreadPool a simple implementation of a thread provider as required
    15 // for the sandbox IPC subsystem. See sandbox\crosscall_server.h for the details
    16 // and requirements of this interface.
    17 //
    18 // Implementing the thread provider as a thread pool is desirable in the case
    19 // of shared memory IPC because it can generate a large number of waitable
    20 // events: as many as channels. A thread pool does not create a thread per
    21 // event, instead maintains a few idle threads but can create more if the need
    22 // arises.
    23 //
    24 // This implementation simply thunks to the nice thread pool API of win2k.
    25 class Win2kThreadPool : public ThreadProvider {
    26  public:
    27   Win2kThreadPool() {
    28     ::InitializeCriticalSection(&lock_);
    29   }
    30   virtual ~Win2kThreadPool();
    32   virtual bool RegisterWait(const void* cookie, HANDLE waitable_object,
    33                             CrossCallIPCCallback callback,
    34                             void* context);
    36   virtual bool UnRegisterWaits(void* cookie);
    38   // Returns the total number of wait objects associated with
    39   // the thread pool.
    40   size_t OutstandingWaits();
    42  private:
    43   // record to keep track of a wait and its associated cookie.
    44   struct PoolObject {
    45     const void* cookie;
    46     HANDLE wait;
    47   };
    48   // The list of pool wait objects.
    49   typedef std::list<PoolObject> PoolObjects;
    50   PoolObjects pool_objects_;
    51   // This lock protects the list of pool wait objects.
    52   CRITICAL_SECTION lock_;
    53   DISALLOW_COPY_AND_ASSIGN(Win2kThreadPool);
    54 };
    56 }  // namespace sandbox
    58 #endif  // SANDBOX_SRC_WIN2K_THREADPOOL_H_

mercurial