Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 22138 invoked from network); 5 Jun 2007 15:11:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Jun 2007 15:11:48 -0000 Received: (qmail 52575 invoked by uid 500); 5 Jun 2007 15:11:51 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 52562 invoked by uid 500); 5 Jun 2007 15:11:51 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 52546 invoked by uid 99); 5 Jun 2007 15:11:51 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Jun 2007 08:11:51 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Jun 2007 08:11:47 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 1D3DD71419D for ; Tue, 5 Jun 2007 08:11:27 -0700 (PDT) Message-ID: <26173096.1181056287116.JavaMail.jira@brutus> Date: Tue, 5 Jun 2007 08:11:27 -0700 (PDT) From: "Gregory Shimansky (JIRA)" To: commits@harmony.apache.org Subject: [jira] Assigned: (HARMONY-4015) [drlvm][classloader][tc] Known/proven race conditions markup at "class.cpp" at func helper_get_interface_vtable() (499-514) In-Reply-To: <14464255.1180622595826.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/HARMONY-4015?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gregory Shimansky reassigned HARMONY-4015: ------------------------------------------ Assignee: Gregory Shimansky > [drlvm][classloader][tc] Known/proven race conditions markup at "class.cpp" at func helper_get_interface_vtable() (499-514) > --------------------------------------------------------------------------------------------------------------------------- > > Key: HARMONY-4015 > URL: https://issues.apache.org/jira/browse/HARMONY-4015 > Project: Harmony > Issue Type: Bug > Components: DRLVM > Reporter: Ilya Leviev > Assignee: Gregory Shimansky > Attachments: HARMONY-4015_add_markup.patch, SourceViewScreenshot-1.jpg > > > Known/proven race conditions markup at "class.cpp" at func helper_get_interface_vtable() (499-514) > TC report on thread unsafe access that result in race conditions that occur during concurrent execution of helper_get_interface_vtable function. > As issues related to vm statistic data collection in debug mode and it not affect correctness of execution I have marked it by special API for prevention of further alarms on this race. > Race conditions: > 1) Write -> Write data-race > Memory write at "class.cpp":499 conflicts with a prior memory write at "class.cpp":499 > 2) Write -> Write data-race > Memory write at "class.cpp":501 conflicts with a prior memory write at "class.cpp":501 > 3) Write -> Write data-race > Memory write at "class.cpp":503 conflicts with a prior memory write at "class.cpp":503 > 4) Write -> Write data-race > Memory write at "class.cpp":514 conflicts with a prior memory write at "class.cpp":514 > Stack Trace: > Context > Function void CallVoidMethodA(struct JNIEnv_External *,struct _jobject *,struct _jmethodID *,union jvalue *) "jni_method.cpp":225 > Function call_method_no_ref_result "jni_method.cpp":187 > Function void vm_execute_java_method_array(struct _jmethodID *,union jvalue *,union jvalue *) "ini.cpp":60 > Function ExecuteMethod "em_intf.cpp":43 > Function void DrlEMImpl::executeMethod(struct _jmethodID *,union jvalue *,union jvalue *) "drlemimpl.cpp":509 > Function void JIT_execute_method_default(void *,struct _jmethodID *,union jvalue *,union jvalue *) "ini_ia32.cpp":199 > Function vm_invoke_native_array_stub "ini_ia32.cpp":76 > Function hythread_thin_monitor_exit "thread_native_thin_monitor.c":436 > Function rth_get_interface_vtable "jit_runtime_support.cpp":650 > Function void * Class::helper_get_interface_vtable(struct ManagedObject *,struct Class *) "class.cpp":494 > 1st Access > Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 > Function vm_get_gc_thread_local "c_interface.cpp":2414 > Function m2n_free_local_handles "m2n_ia32.cpp":268 > Function vm_get_gc_thread_local "c_interface.cpp":2414 > Function gc_alloc_fast "mutator_alloc.cpp":120 > Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 > Function m2n_free_local_handles "m2n_ia32.cpp":268 > Function vm_get_gc_thread_local "c_interface.cpp":2414 > Function rth_get_interface_vtable "jit_runtime_support.cpp":650 > Function void * Class::helper_get_interface_vtable(struct ManagedObject *,struct Class *) "class.cpp":499 > "497" "" " unsigned num_intfc = intfTable->n_entries;" > "498" "" " #ifdef VM_STATS" > "499" "*" " VM_Statistics::get_vm_stats().num_invokeinterface_calls++;" > "500" "" " switch(num_intfc) {" > "501" "*" " case 1: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_1++; break;" > "502" "" " case 2: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_2++; break;" > "503" "*" " default: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_many++; break;" > "504" "" " }" > "505" "" " if(num_intfc > VM_Statistics::get_vm_stats().invokeinterface_calls_size_max)" > "506" "" " VM_Statistics::get_vm_stats().invokeinterface_calls_size_max = num_intfc;" > 2nd Access > Function void CallVoidMethodA(struct JNIEnv_External *,struct _jobject *,struct _jmethodID *,union jvalue *) "jni_method.cpp":225 > Function call_method_no_ref_result "jni_method.cpp":187 > Function void vm_execute_java_method_array(struct _jmethodID *,union jvalue *,union jvalue *) "ini.cpp":60 > Function ExecuteMethod "em_intf.cpp":43 > Function void DrlEMImpl::executeMethod(struct _jmethodID *,union jvalue *,union jvalue *) "drlemimpl.cpp":509 > Function void JIT_execute_method_default(void *,struct _jmethodID *,union jvalue *,union jvalue *) "ini_ia32.cpp":199 > Function vm_invoke_native_array_stub "ini_ia32.cpp":76 > Function hythread_thin_monitor_exit "thread_native_thin_monitor.c":436 > Function rth_get_interface_vtable "jit_runtime_support.cpp":650 > Function void * Class::helper_get_interface_vtable(struct ManagedObject *,struct Class *) "class.cpp":499 > "497" "" " unsigned num_intfc = intfTable->n_entries;" > "498" "" " #ifdef VM_STATS" > "499" "*" " VM_Statistics::get_vm_stats().num_invokeinterface_calls++;" > "500" "" " switch(num_intfc) {" > "501" "*" " case 1: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_1++; break;" > "502" "" " case 2: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_2++; break;" > "503" "*" " default: VM_Statistics::get_vm_stats().num_invokeinterface_calls_size_many++; break;" > "504" "" " }" > "505" "" " if(num_intfc > VM_Statistics::get_vm_stats().invokeinterface_calls_size_max)" > "506" "" " VM_Statistics::get_vm_stats().invokeinterface_calls_size_max = num_intfc;" > See also Source View screenshots. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.