Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 51734 invoked from network); 18 May 2007 14:36:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 May 2007 14:36:39 -0000 Received: (qmail 13283 invoked by uid 500); 18 May 2007 14:36:44 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 13269 invoked by uid 500); 18 May 2007 14:36:44 -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 13260 invoked by uid 99); 18 May 2007 14:36:44 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 May 2007 07:36:44 -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; Fri, 18 May 2007 07:36:37 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id D8286714073 for ; Fri, 18 May 2007 07:36:16 -0700 (PDT) Message-ID: <26515115.1179498976882.JavaMail.jira@brutus> Date: Fri, 18 May 2007 07:36:16 -0700 (PDT) From: "Ilya Leviev (JIRA)" To: commits@harmony.apache.org Subject: [jira] Created: (HARMONY-3912) [drlvm][thread] Race conditions at "thread_native_thin_monitor.c":78 and "thread_java_monitors.c":361/362 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [drlvm][thread] Race conditions at "thread_native_thin_monitor.c":78 and "thread_java_monitors.c":361/362 --------------------------------------------------------------------------------------------------------- Key: HARMONY-3912 URL: https://issues.apache.org/jira/browse/HARMONY-3912 Project: Harmony Issue Type: Bug Components: DRLVM Environment: win2003 Reporter: Ilya Leviev TC report on thread unsafe access that result in 2 race conditions that occur during concurrent execution of set_fat_lock_id and hythread_thin_monitor_enter functions. Write -> Read data-race Memory read at "thread_native_thin_monitor.c":361 conflicts with a prior memory write at "thread_native_thin_monitor.c":78 Write -> Read data-race Memory read at "thread_native_thin_monitor.c":362 conflicts with a prior memory write at "thread_native_thin_monitor.c":78 Stack Trace: Context 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 class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function hythread_thin_monitor_try_enter "thread_native_thin_monitor.c":341 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function jthread_monitor_enter "thread_java_monitors.c":123 Function hythread_thin_monitor_enter "thread_native_thin_monitor.c":349 1st Access Function vm_invoke_native_array_stub "ini_ia32.cpp":76 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function hythread_thin_monitor_try_enter "thread_native_thin_monitor.c":341 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function jthread_monitor_enter "thread_java_monitors.c":135 Function inflate_lock "thread_native_thin_monitor.c":600 Function set_fat_lock_id "thread_native_thin_monitor.c":78 "76" "" " lockword&=0x7FF;" "77" "" " lockword|=(monitor_id << 11) | 0x80000000;" "78" "*" " *lockword_ptr=lockword;" "79" "" " apr_memory_rw_barrier();" 2nd Access 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 class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function m2n_free_local_handles "m2n_ia32.cpp":268 Function hythread_thin_monitor_try_enter "thread_native_thin_monitor.c":341 Function class VM_thread * get_thread_ptr_stub(void) "thread_manager.cpp":138 Function jthread_monitor_enter "thread_java_monitors.c":123 Function hythread_thin_monitor_enter "thread_native_thin_monitor.c":361/362 "360" "" " while (hythread_thin_monitor_try_enter(lockword_ptr) == TM_ERROR_EBUSY) {" "361" "*" " if (IS_FAT_LOCK(*lockword_ptr)) {" "362" "*" " fat_monitor = locktable_get_fat_monitor(FAT_LOCK_ID(*lockword_ptr)); // find fat_monitor in lock table" "363" "" " TRACE(("" lock %d\n"", FAT_LOCK_ID(*lockword_ptr)));" "364" "" " saved_disable_count=reset_suspend_disable();" See also Source View screenshot. Notes on Write->Read race condition. ------------------------------------ Write->Read data races occur when one thread writes a shared memory location (address) while another thread concurrently reads the same memory location. The shared memory location may be referred to by (variable) name, pointer, or even a function such as memcpy(). The following example uses a variable name: 1st access by first thread S1: sharedX = privateA 2nd access by second thread S2: privateB = sharedX If sharedX is a variable visible to all threads and privateA and privateB are local variables visible only to the thread where each was declared, concurrent execution of the above statements by multiple threads results in a "race" on the value to be read from sharedX. Since the order of execution among threads is unpredictable, it is unknown which value will be available in sharedX to be stored into privateB. This results in non-deterministic software, or software prone to produce different results each time it is executed. _______________________________________________________________________________________________________________________ If it not affect correctness of execution I will mark it by special API for prevention of further alarms on this race. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.