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

Side by Side Diff: src/d8.cc

Issue 1258303004: Avoid data race when writing Shell::options.script_executed. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 5
6 // Defined when linking against shared lib on Windows. 6 // Defined when linking against shared lib on Windows.
7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED)
8 #define V8_SHARED 8 #define V8_SHARED
9 #endif 9 #endif
10 10
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 return result; 289 return result;
290 } 290 }
291 291
292 292
293 // Executes a string within the current v8 context. 293 // Executes a string within the current v8 context.
294 bool Shell::ExecuteString(Isolate* isolate, Local<String> source, 294 bool Shell::ExecuteString(Isolate* isolate, Local<String> source,
295 Local<Value> name, bool print_result, 295 Local<Value> name, bool print_result,
296 bool report_exceptions, SourceType source_type) { 296 bool report_exceptions, SourceType source_type) {
297 HandleScope handle_scope(isolate); 297 HandleScope handle_scope(isolate);
298 TryCatch try_catch(isolate); 298 TryCatch try_catch(isolate);
299 options.script_executed = true;
300 299
301 MaybeLocal<Value> maybe_result; 300 MaybeLocal<Value> maybe_result;
302 { 301 {
303 PerIsolateData* data = PerIsolateData::Get(isolate); 302 PerIsolateData* data = PerIsolateData::Get(isolate);
304 Local<Context> realm = 303 Local<Context> realm =
305 Local<Context>::New(isolate, data->realms_[data->realm_current_]); 304 Local<Context>::New(isolate, data->realms_[data->realm_current_]);
306 Context::Scope context_scope(realm); 305 Context::Scope context_scope(realm);
307 Local<Script> script; 306 Local<Script> script;
308 if (!Shell::CompileString(isolate, source, name, options.compile_options, 307 if (!Shell::CompileString(isolate, source, name, options.compile_options,
309 source_type).ToLocal(&script)) { 308 source_type).ToLocal(&script)) {
(...skipping 1110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 Shell::SourceType source_type = Shell::SCRIPT; 1419 Shell::SourceType source_type = Shell::SCRIPT;
1421 if (strcmp(arg, "-e") == 0 && i + 1 < end_offset_) { 1420 if (strcmp(arg, "-e") == 0 && i + 1 < end_offset_) {
1422 // Execute argument given to -e option directly. 1421 // Execute argument given to -e option directly.
1423 HandleScope handle_scope(isolate); 1422 HandleScope handle_scope(isolate);
1424 Local<String> file_name = 1423 Local<String> file_name =
1425 String::NewFromUtf8(isolate, "unnamed", NewStringType::kNormal) 1424 String::NewFromUtf8(isolate, "unnamed", NewStringType::kNormal)
1426 .ToLocalChecked(); 1425 .ToLocalChecked();
1427 Local<String> source = 1426 Local<String> source =
1428 String::NewFromUtf8(isolate, argv_[i + 1], NewStringType::kNormal) 1427 String::NewFromUtf8(isolate, argv_[i + 1], NewStringType::kNormal)
1429 .ToLocalChecked(); 1428 .ToLocalChecked();
1429 Shell::options.script_executed = true;
1430 if (!Shell::ExecuteString(isolate, source, file_name, false, true)) { 1430 if (!Shell::ExecuteString(isolate, source, file_name, false, true)) {
1431 exception_was_thrown = true; 1431 exception_was_thrown = true;
1432 break; 1432 break;
1433 } 1433 }
1434 ++i; 1434 ++i;
1435 continue; 1435 continue;
1436 } else if (strcmp(arg, "--module") == 0 && i + 1 < end_offset_) { 1436 } else if (strcmp(arg, "--module") == 0 && i + 1 < end_offset_) {
1437 // Treat the next file as a module. 1437 // Treat the next file as a module.
1438 source_type = Shell::MODULE; 1438 source_type = Shell::MODULE;
1439 arg = argv_[++i]; 1439 arg = argv_[++i];
1440 } else if (arg[0] == '-') { 1440 } else if (arg[0] == '-') {
1441 // Ignore other options. They have been parsed already. 1441 // Ignore other options. They have been parsed already.
1442 continue; 1442 continue;
1443 } 1443 }
1444 1444
1445 // Use all other arguments as names of files to load and run. 1445 // Use all other arguments as names of files to load and run.
1446 HandleScope handle_scope(isolate); 1446 HandleScope handle_scope(isolate);
1447 Local<String> file_name = 1447 Local<String> file_name =
1448 String::NewFromUtf8(isolate, arg, NewStringType::kNormal) 1448 String::NewFromUtf8(isolate, arg, NewStringType::kNormal)
1449 .ToLocalChecked(); 1449 .ToLocalChecked();
1450 Local<String> source = ReadFile(isolate, arg); 1450 Local<String> source = ReadFile(isolate, arg);
1451 if (source.IsEmpty()) { 1451 if (source.IsEmpty()) {
1452 printf("Error reading '%s'\n", arg); 1452 printf("Error reading '%s'\n", arg);
1453 Shell::Exit(1); 1453 Shell::Exit(1);
1454 } 1454 }
1455 Shell::options.script_executed = true;
1455 if (!Shell::ExecuteString(isolate, source, file_name, false, true, 1456 if (!Shell::ExecuteString(isolate, source, file_name, false, true,
1456 source_type)) { 1457 source_type)) {
1457 exception_was_thrown = true; 1458 exception_was_thrown = true;
1458 break; 1459 break;
1459 } 1460 }
1460 } 1461 }
1461 if (exception_was_thrown != Shell::options.expected_to_throw) { 1462 if (exception_was_thrown != Shell::options.expected_to_throw) {
1462 Shell::Exit(1); 1463 Shell::Exit(1);
1463 } 1464 }
1464 } 1465 }
(...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after
2454 } 2455 }
2455 2456
2456 } // namespace v8 2457 } // namespace v8
2457 2458
2458 2459
2459 #ifndef GOOGLE3 2460 #ifndef GOOGLE3
2460 int main(int argc, char* argv[]) { 2461 int main(int argc, char* argv[]) {
2461 return v8::Shell::Main(argc, argv); 2462 return v8::Shell::Main(argc, argv);
2462 } 2463 }
2463 #endif 2464 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698