Revision: 7557
Author:   [email protected]
Date:     Fri Apr  8 04:25:19 2011
Log:      Fix compilation with gdbjit=on.

Ensure mutual exclusion on access to GDBJITInterface internal structures to make it work correctly with several isolates.

Review URL: http://codereview.chromium.org/6816053
http://code.google.com/p/v8/source/detail?r=7557

Modified:
 /branches/bleeding_edge/src/compiler.cc
 /branches/bleeding_edge/src/gdb-jit.cc
 /branches/bleeding_edge/src/gdb-jit.h

=======================================
--- /branches/bleeding_edge/src/compiler.cc     Thu Apr  7 07:42:37 2011
+++ /branches/bleeding_edge/src/compiler.cc     Fri Apr  8 04:25:19 2011
@@ -784,7 +784,7 @@
     }
   }

-  GDBJIT(AddCode(name,
+  GDBJIT(AddCode(Handle<String>(shared->DebugName()),
                  Handle<Script>(info->script()),
                  Handle<Code>(info->code())));
 }
=======================================
--- /branches/bleeding_edge/src/gdb-jit.cc      Fri Mar 18 13:35:07 2011
+++ /branches/bleeding_edge/src/gdb-jit.cc      Fri Apr  8 04:25:19 2011
@@ -1443,6 +1443,9 @@
   }
 #endif  // V8_TARGET_ARCH_X64
 }
+
+
+Mutex* GDBJITInterface::mutex_ = OS::CreateMutex();


 void GDBJITInterface::AddCode(const char* name,
@@ -1450,6 +1453,8 @@
                               GDBJITInterface::CodeTag tag,
                               Script* script) {
   if (!FLAG_gdbjit) return;
+
+  ScopedLock lock(mutex_);
   AssertNoAllocation no_gc;

HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true);
@@ -1518,6 +1523,7 @@
 void GDBJITInterface::RemoveCode(Code* code) {
   if (!FLAG_gdbjit) return;

+  ScopedLock lock(mutex_);
   HashMap::Entry* e = GetEntries()->Lookup(code,
                                            HashForCodeObject(code),
                                            false);
@@ -1537,6 +1543,7 @@

 void GDBJITInterface::RegisterDetailedLineInfo(Code* code,
                                                GDBJITLineInfo* line_info) {
+  ScopedLock lock(mutex_);
   ASSERT(!IsLineInfoTagged(line_info));
HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true);
   ASSERT(e->value == NULL);
=======================================
--- /branches/bleeding_edge/src/gdb-jit.h       Wed Feb  2 05:32:18 2011
+++ /branches/bleeding_edge/src/gdb-jit.h       Fri Apr  8 04:25:19 2011
@@ -126,6 +126,9 @@
   static void RemoveCode(Code* code);

static void RegisterDetailedLineInfo(Code* code, GDBJITLineInfo* line_info);
+
+ private:
+  static Mutex* mutex_;
 };

 #define GDBJIT(action) GDBJITInterface::action

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

Reply via email to