OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include "native_client/src/shared/platform/nacl_log.h" | 7 #include "native_client/src/shared/platform/nacl_log.h" |
8 #include "native_client/src/trusted/service_runtime/nacl_app_thread.h" | 8 #include "native_client/src/trusted/service_runtime/nacl_app_thread.h" |
9 #include "native_client/src/trusted/service_runtime/sel_ldr.h" | 9 #include "native_client/src/trusted/service_runtime/sel_ldr.h" |
10 #include "native_client/src/trusted/service_runtime/thread_suspension.h" | 10 #include "native_client/src/trusted/service_runtime/thread_suspension.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 struct NaClApp app; | 108 struct NaClApp app; |
109 ASSERT_EQ(NaClAppCtor(&app), 1); | 109 ASSERT_EQ(NaClAppCtor(&app), 1); |
110 | 110 |
111 struct NaClAppThread app_thread; | 111 struct NaClAppThread app_thread; |
112 AppThreadInitMinimal(&app_thread); | 112 AppThreadInitMinimal(&app_thread); |
113 | 113 |
114 struct ThreadArgs thread_args; | 114 struct ThreadArgs thread_args; |
115 thread_args.natp = NULL; | 115 thread_args.natp = NULL; |
116 thread_args.var = 0; | 116 thread_args.var = 0; |
117 thread_args.should_exit = false; | 117 thread_args.should_exit = false; |
118 ASSERT_EQ(NaClThreadCreateJoinable(&app_thread.thread, MutatorThread, | 118 app_thread.host_thread_is_defined = 1; |
| 119 ASSERT_EQ(NaClThreadCreateJoinable(&app_thread.host_thread, MutatorThread, |
119 &thread_args, NACL_KERN_STACK_SIZE), 1); | 120 &thread_args, NACL_KERN_STACK_SIZE), 1); |
120 ASSERT_EQ(NaClAddThread(&app, &app_thread), 0); | 121 ASSERT_EQ(NaClAddThread(&app, &app_thread), 0); |
121 TrySuspendingMutatorThread(&app, &thread_args.var); | 122 TrySuspendingMutatorThread(&app, &thread_args.var); |
122 thread_args.should_exit = true; | 123 thread_args.should_exit = true; |
123 NaClThreadJoin(&app_thread.thread); | 124 NaClThreadJoin(&app_thread.host_thread); |
124 } | 125 } |
125 | 126 |
126 | 127 |
127 // The test below checks that we do not get a deadlock when using | 128 // The test below checks that we do not get a deadlock when using |
128 // NaClUntrustedThreadsSuspendAll() on threads that cross between | 129 // NaClUntrustedThreadsSuspendAll() on threads that cross between |
129 // untrusted and trusted code by invoking NaCl syscalls. | 130 // untrusted and trusted code by invoking NaCl syscalls. |
130 // | 131 // |
131 // This is a stress test. It is not guaranteed to find a problem, but | 132 // This is a stress test. It is not guaranteed to find a problem, but |
132 // it did reproduce the problem in the original buggy version of the | 133 // it did reproduce the problem in the original buggy version of the |
133 // code when Sleep() calls were inserted in suitable places. | 134 // code when Sleep() calls were inserted in suitable places. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 struct NaClApp app; | 166 struct NaClApp app; |
166 ASSERT_EQ(NaClAppCtor(&app), 1); | 167 ASSERT_EQ(NaClAppCtor(&app), 1); |
167 | 168 |
168 struct NaClAppThread app_thread; | 169 struct NaClAppThread app_thread; |
169 AppThreadInitMinimal(&app_thread); | 170 AppThreadInitMinimal(&app_thread); |
170 | 171 |
171 struct ThreadArgs thread_args; | 172 struct ThreadArgs thread_args; |
172 thread_args.natp = &app_thread; | 173 thread_args.natp = &app_thread; |
173 thread_args.var = 0; | 174 thread_args.var = 0; |
174 thread_args.should_exit = false; | 175 thread_args.should_exit = false; |
175 ASSERT_EQ(NaClThreadCreateJoinable(&app_thread.thread, SyscallInvokerThread, | 176 app_thread.host_thread_is_defined = 1; |
| 177 ASSERT_EQ(NaClThreadCreateJoinable(&app_thread.host_thread, |
| 178 SyscallInvokerThread, |
176 &thread_args, NACL_KERN_STACK_SIZE), 1); | 179 &thread_args, NACL_KERN_STACK_SIZE), 1); |
177 ASSERT_EQ(NaClAddThread(&app, &app_thread), 0); | 180 ASSERT_EQ(NaClAddThread(&app, &app_thread), 0); |
178 TrySuspendingSyscallInvokerThread(&app, &thread_args.var); | 181 TrySuspendingSyscallInvokerThread(&app, &thread_args.var); |
179 thread_args.should_exit = true; | 182 thread_args.should_exit = true; |
180 NaClThreadJoin(&app_thread.thread); | 183 NaClThreadJoin(&app_thread.host_thread); |
181 } | 184 } |
182 | 185 |
183 #endif | 186 #endif |
OLD | NEW |