Add more LOCK_V8 macros: the custom V8 bindings are used to invoke JS callbacks to let the JS application know when something interesting happens. These entry points into V8 are denoted by "handleEvent" methods and need to be protected as well.
diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp
index 97bb8ec..eecff45 100644
--- a/WebCore/bindings/v8/ScriptController.cpp
+++ b/WebCore/bindings/v8/ScriptController.cpp
@@ -145,7 +145,7 @@
         return true;
 
     V8Proxy* activeProxy = activeFrame->script()->proxy();
-
+    LOCK_V8;
     v8::HandleScope handleScope;
     v8::Handle<v8::Context> context = V8Proxy::GetContext(activeFrame);
     // FIXME: find all cases context can be empty:
@@ -244,6 +244,7 @@
 
 void ScriptController::collectGarbage()
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_proxy->frame());
     if (context.IsEmpty())
@@ -336,6 +337,7 @@
 
 static NPObject* createScriptObject(Frame* frame)
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
     v8::Handle<v8::Context> context = V8Proxy::GetContext(frame);
     if (context.IsEmpty())
diff --git a/WebCore/bindings/v8/custom/V8CustomSQLStatementCallback.cpp b/WebCore/bindings/v8/custom/V8CustomSQLStatementCallback.cpp
index a277027..daa9b34 100644
--- a/WebCore/bindings/v8/custom/V8CustomSQLStatementCallback.cpp
+++ b/WebCore/bindings/v8/custom/V8CustomSQLStatementCallback.cpp
@@ -52,6 +52,7 @@
 
 void V8CustomSQLStatementCallback::handleEvent(SQLTransaction* transaction, SQLResultSet* resultSet, bool& raisedException)
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
 
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame.get());
diff --git a/WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp b/WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp
index 2f4401f..6c7aba2 100644
--- a/WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp
+++ b/WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp
@@ -52,6 +52,7 @@
 
 bool V8CustomSQLStatementErrorCallback::handleEvent(SQLTransaction* transaction, SQLError* error)
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
 
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame.get());
diff --git a/WebCore/bindings/v8/custom/V8CustomSQLTransactionCallback.cpp b/WebCore/bindings/v8/custom/V8CustomSQLTransactionCallback.cpp
index a175df5..c255483 100644
--- a/WebCore/bindings/v8/custom/V8CustomSQLTransactionCallback.cpp
+++ b/WebCore/bindings/v8/custom/V8CustomSQLTransactionCallback.cpp
@@ -53,6 +53,7 @@
 
 void V8CustomSQLTransactionCallback::handleEvent(SQLTransaction* transaction, bool& raisedException)
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
 
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame.get());
diff --git a/WebCore/bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp b/WebCore/bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp
index 6233a1d..8dcb0a8 100644
--- a/WebCore/bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp
+++ b/WebCore/bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp
@@ -52,6 +52,7 @@
 
 void V8CustomSQLTransactionErrorCallback::handleEvent(SQLError* error)
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
 
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame.get());
diff --git a/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp b/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp
index ee0b05e..b2972e4 100644
--- a/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp
+++ b/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp
@@ -48,6 +48,7 @@
 
 void V8CustomVoidCallback::handleEvent()
 {
+    LOCK_V8;
     v8::HandleScope handleScope;
 
     v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame.get());