Comment #2 on issue 2207 by [email protected]: Win64 d8 built with GYP crashes during startup in release mode
http://code.google.com/p/v8/issues/detail?id=2207

Hi Ulan,

The fact that it is an optimization-related issue makes me think that the compiler might remove the unused 'static_initializer' variable in isolate.cc used to trigger 'Isolate::EnsureDefaultIsolate()' at static initialization time (although its constructor has some side effects).

Before r11010 this initialization code was slightly different.

Before r11010 (in isolate.cc):
class IsolateInitializer {
 public:
  IsolateInitializer() {
    Isolate::EnsureDefaultIsolate();
  }
};

static IsolateInitializer* EnsureDefaultIsolateAllocated() {
  // TODO(isolates): Use the system threading API to do this once?
  static IsolateInitializer static_initializer;
  return &static_initializer;
}

// This variable only needed to trigger static intialization.
static IsolateInitializer* static_initializer = EnsureDefaultIsolateAllocated();

On r11010:
struct StaticInitializer {
  StaticInitializer() {
    Isolate::EnsureDefaultIsolate();
  }
} static_initializer;

I suggest that you try to revert this specific part of the change. I don't have the appropriate testing environment to try that. If this does not work I will see if I can set it up.

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to