Commit 79ad8bf2 authored by vegorov@chromium.org's avatar vegorov@chromium.org

Fix sporadic crash in the RequestInterruptTestWithNativeAccessor.

The test was broken. V8 currently does not correctly lookup NativeDataProperty accessors attached to the PrototypeTemplate of FunctionTemplate (Issue 3066). As the result while(obj.shouldContinue) loop was immediately exiting and the test would terminate while RequestInterruptTestBase::InterruptThread would be still starting up. As the result later InterruptThread would try to access members of the test object which was destroyed.

The test was fixed:

- instead of attaching accessor to PrototypeTemplate we attach it to  InstanceTemplate;
- an assertion was added to verify that we completed the test successfully due to interruptor firing not due to sporadic loop termination due to some unrelated bug.

R=hpayer@chromium.org

Review URL: https://codereview.chromium.org/109653010

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18391 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent e84e2abd
......@@ -21048,6 +21048,10 @@ class RequestInterruptTestBase {
TestBody();
isolate_->ClearInterrupt();
// Verify we arrived here because interruptor was called
// not due to a bug causing us to exit the loop too early.
CHECK(!should_continue());
}
void WakeUpInterruptor() {
......@@ -21146,11 +21150,11 @@ class RequestInterruptTestWithNativeAccessor : public RequestInterruptTestBase {
public:
virtual void TestBody() {
v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate_);
v8::Local<v8::Template> proto = t->PrototypeTemplate();
proto->SetNativeDataProperty(v8_str("shouldContinue"),
&ShouldContinueNativeGetter,
NULL,
v8::External::New(isolate_, this));
t->InstanceTemplate()->SetNativeDataProperty(
v8_str("shouldContinue"),
&ShouldContinueNativeGetter,
NULL,
v8::External::New(isolate_, this));
env_->Global()->Set(v8_str("Klass"), t->GetFunction());
CompileRun("var obj = new Klass; while (obj.shouldContinue) { }");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment