You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/02/07 15:28:47 UTC

svn commit: r504560 - in /harmony/enhanced/drlvm/trunk/vm/vmcore: include/environment.h src/class_support/Environment.cpp src/jit/compile.cpp src/jvmti/jvmti_event.cpp src/util/native_stack.cpp

Author: gshimansky
Date: Wed Feb  7 06:28:46 2007
New Revision: 504560

URL: http://svn.apache.org/viewvc?view=rev&rev=504560
Log:
Applied HARMONY-2933 [drlvm][vmcore][jit] Unsynchronized linked list modification

Tests passed on Ubuntu6 x86, Windows 2003 server x86 and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/native_stack.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h?view=diff&rev=504560&r1=504559&r2=504560
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h Wed Feb  7 06:28:46 2007
@@ -78,6 +78,7 @@
     Lock_Manager *p_meth_addr_table_lock;
     Lock_Manager *p_method_call_lock;
     Lock_Manager *p_handle_lock;
+    Lock_Manager *p_dclist_lock;
 
     /**
      * If set to true by the <code>-compact_fields</code> command-line option,

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp?view=diff&rev=504560&r1=504559&r2=504560
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp Wed Feb  7 06:28:46 2007
@@ -145,6 +145,7 @@
     p_meth_addr_table_lock = new Lock_Manager();
     p_handle_lock = new Lock_Manager();
     p_method_call_lock = new Lock_Manager();
+    p_dclist_lock = new Lock_Manager();
 
     //
     // preloaded classes
@@ -245,6 +246,7 @@
     delete p_meth_addr_table_lock;
     delete p_handle_lock;
     delete p_method_call_lock;
+    delete p_dclist_lock;
 
     // Unload jit instances.
     vm_delete_all_jits();

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp?view=diff&rev=504560&r1=504559&r2=504560
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp Wed Feb  7 06:28:46 2007
@@ -807,13 +807,16 @@
 // Adding dynamic generated code info to global list
 void compile_add_dynamic_generated_code_chunk(const char* name, const void* address, jint length)
 {
-    DynamicCode** pdcList = &VM_Global_State::loader_env->dcList;
-    // FIXME linked list modification without synchronization
     DynamicCode *dc = (DynamicCode *)STD_MALLOC(sizeof(DynamicCode));
     assert(dc);
     dc->name = name;
     dc->address = address;
     dc->length = length;
+
+    // Synchronizing access to dynamic code list
+    LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock);
+
+    DynamicCode** pdcList = &VM_Global_State::loader_env->dcList;
     dc->next = *pdcList;
     *pdcList = dc;
 }

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp?view=diff&rev=504560&r1=504559&r2=504560
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp Wed Feb  7 06:28:46 2007
@@ -611,10 +611,15 @@
     }
     else
     {
-        // FIXME: linked list usage without sync
+        Lock_Manager* dclock = VM_Global_State::loader_env->p_dclist_lock;
+        // Synchronizing access to dynamic code list
+        dclock->_lock();
+
         for (DynamicCode *dcList = compile_get_dynamic_code_list();
             NULL != dcList; dcList = dcList->next)
             jvmti_send_dynamic_code_generated_event(dcList->name, dcList->address, dcList->length);
+
+        dclock->_unlock();
     }
 
     return JVMTI_ERROR_NONE;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/native_stack.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/native_stack.cpp?view=diff&rev=504560&r1=504559&r2=504560
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/native_stack.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/native_stack.cpp Wed Feb  7 06:28:46 2007
@@ -80,6 +80,9 @@
 
 bool native_is_ip_stub(void* ip)
 {
+    // Synchronizing access to dynamic code list
+    LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock);
+
     for (DynamicCode *dcList = compile_get_dynamic_code_list();
          NULL != dcList; dcList = dcList->next)
     {