Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: ppapi/thunk/enter.h

Issue 19492014: PPAPI: Purposely leak ProxyLock, fix shutdown race (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove static initializer Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/shared_impl/var_value_conversions_unittest.cc ('k') | ppapi/thunk/enter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PPAPI_THUNK_ENTER_H_ 5 #ifndef PPAPI_THUNK_ENTER_H_
6 #define PPAPI_THUNK_ENTER_H_ 6 #define PPAPI_THUNK_ENTER_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 25 matching lines...) Expand all
36 // input values are correct (the normal case), this should be set to true. In 36 // input values are correct (the normal case), this should be set to true. In
37 // some case like |IsFoo(PP_Resource)| the caller is questioning whether their 37 // some case like |IsFoo(PP_Resource)| the caller is questioning whether their
38 // handle is this type, and we don't want to report an error if it's not. 38 // handle is this type, and we don't want to report an error if it's not.
39 // 39 //
40 // Resource member functions: EnterResource 40 // Resource member functions: EnterResource
41 // Automatically interprets the given PP_Resource as a resource ID and sets 41 // Automatically interprets the given PP_Resource as a resource ID and sets
42 // up the resource object for you. 42 // up the resource object for you.
43 43
44 namespace subtle { 44 namespace subtle {
45 45
46 // Assert that we are holding the proxy lock.
47 PPAPI_THUNK_EXPORT void AssertLockHeld();
48
49 // This helps us define our RAII Enter classes easily. To make an RAII class 46 // This helps us define our RAII Enter classes easily. To make an RAII class
50 // which locks the proxy lock on construction and unlocks on destruction, 47 // which locks the proxy lock on construction and unlocks on destruction,
51 // inherit from |LockOnEntry<true>| before all other base classes. This ensures 48 // inherit from |LockOnEntry<true>| before all other base classes. This ensures
52 // that the lock is acquired before any other base class's constructor can run, 49 // that the lock is acquired before any other base class's constructor can run,
53 // and that the lock is only released after all other destructors have run. 50 // and that the lock is only released after all other destructors have run.
54 // (This order of initialization is guaranteed by C++98/C++11 12.6.2.10). 51 // (This order of initialization is guaranteed by C++98/C++11 12.6.2.10).
55 // 52 //
56 // For cases where you don't want to lock, inherit from |LockOnEntry<false>|. 53 // For cases where you don't want to lock, inherit from |LockOnEntry<false>|.
57 // This allows us to share more code between Enter* and Enter*NoLock classes. 54 // This allows us to share more code between Enter* and Enter*NoLock classes.
58 template <bool lock_on_entry> 55 template <bool lock_on_entry>
59 struct LockOnEntry; 56 struct LockOnEntry;
60 57
61 template <> 58 template <>
62 struct LockOnEntry<false> { 59 struct LockOnEntry<false> {
63 #if (!NDEBUG) 60 #if (!NDEBUG)
64 LockOnEntry() { 61 LockOnEntry() {
65 // You must already hold the lock to use Enter*NoLock. 62 // You must already hold the lock to use Enter*NoLock.
66 AssertLockHeld(); 63 ProxyLock::AssertAcquired();
67 } 64 }
68 ~LockOnEntry() { 65 ~LockOnEntry() {
69 // You must not release the lock before leaving the scope of the 66 // You must not release the lock before leaving the scope of the
70 // Enter*NoLock. 67 // Enter*NoLock.
71 AssertLockHeld(); 68 ProxyLock::AssertAcquired();
72 } 69 }
73 #endif 70 #endif
74 }; 71 };
75 72
76 template <> 73 template <>
77 struct LockOnEntry<true> { 74 struct LockOnEntry<true> {
78 LockOnEntry() { 75 LockOnEntry() {
79 ppapi::ProxyLock::Acquire(); 76 ppapi::ProxyLock::Acquire();
80 } 77 }
81 ~LockOnEntry() { 78 ~LockOnEntry() {
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 ResourceCreationAPI* functions() { return functions_; } 321 ResourceCreationAPI* functions() { return functions_; }
325 322
326 private: 323 private:
327 ResourceCreationAPI* functions_; 324 ResourceCreationAPI* functions_;
328 }; 325 };
329 326
330 } // namespace thunk 327 } // namespace thunk
331 } // namespace ppapi 328 } // namespace ppapi
332 329
333 #endif // PPAPI_THUNK_ENTER_H_ 330 #endif // PPAPI_THUNK_ENTER_H_
OLDNEW
« no previous file with comments | « ppapi/shared_impl/var_value_conversions_unittest.cc ('k') | ppapi/thunk/enter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698