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

Side by Side Diff: src/top.cc

Issue 179062: Fix the handling of termination exceptions thrown when creating error... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 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 | « src/top.h ('k') | test/cctest/test-thread-termination.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 } 848 }
849 clear_pending_message(); 849 clear_pending_message();
850 } 850 }
851 851
852 852
853 void Top::TraceException(bool flag) { 853 void Top::TraceException(bool flag) {
854 FLAG_trace_exception = flag; 854 FLAG_trace_exception = flag;
855 } 855 }
856 856
857 857
858 bool Top::OptionalRescheduleException(bool is_bottom_call, 858 bool Top::OptionalRescheduleException(bool is_bottom_call) {
859 bool force_clear_catchable) {
860 // Allways reschedule out of memory exceptions. 859 // Allways reschedule out of memory exceptions.
861 if (!is_out_of_memory()) { 860 if (!is_out_of_memory()) {
862 bool is_termination_exception = 861 bool is_termination_exception =
863 pending_exception() == Heap::termination_exception(); 862 pending_exception() == Heap::termination_exception();
864 863
865 // Do not reschedule the exception if this is the bottom call or 864 // Do not reschedule the exception if this is the bottom call.
866 // if we are asked to clear catchable exceptions. Termination 865 bool clear_exception = is_bottom_call;
867 // exceptions are not catchable and are only cleared if this is
868 // the bottom call.
869 bool clear_exception = is_bottom_call ||
870 (force_clear_catchable && !is_termination_exception);
871 866
872 if (is_termination_exception) { 867 if (is_termination_exception) {
873 thread_local_.external_caught_exception_ = false;
874 if (is_bottom_call) { 868 if (is_bottom_call) {
869 thread_local_.external_caught_exception_ = false;
875 clear_pending_exception(); 870 clear_pending_exception();
876 return false; 871 return false;
877 } 872 }
878 } else if (thread_local_.external_caught_exception_) { 873 } else if (thread_local_.external_caught_exception_) {
879 // If the exception is externally caught, clear it if there are no 874 // If the exception is externally caught, clear it if there are no
880 // JavaScript frames on the way to the C++ frame that has the 875 // JavaScript frames on the way to the C++ frame that has the
881 // external handler. 876 // external handler.
882 ASSERT(thread_local_.try_catch_handler_ != NULL); 877 ASSERT(thread_local_.try_catch_handler_ != NULL);
883 Address external_handler_address = 878 Address external_handler_address =
884 reinterpret_cast<Address>(thread_local_.try_catch_handler_); 879 reinterpret_cast<Address>(thread_local_.try_catch_handler_);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 Top::break_access_->Lock(); 963 Top::break_access_->Lock();
969 } 964 }
970 965
971 966
972 ExecutionAccess::~ExecutionAccess() { 967 ExecutionAccess::~ExecutionAccess() {
973 Top::break_access_->Unlock(); 968 Top::break_access_->Unlock();
974 } 969 }
975 970
976 971
977 } } // namespace v8::internal 972 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/top.h ('k') | test/cctest/test-thread-termination.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698