Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 80157 invoked from network); 18 May 2007 15:38:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 May 2007 15:38:39 -0000 Received: (qmail 33798 invoked by uid 500); 18 May 2007 15:38:45 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 33787 invoked by uid 500); 18 May 2007 15:38:45 -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 33497 invoked by uid 99); 18 May 2007 15:38: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 08:38: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 08:38:37 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 2E6A2714071 for ; Fri, 18 May 2007 08:38:17 -0700 (PDT) Message-ID: <22864364.1179502697186.JavaMail.jira@brutus> Date: Fri, 18 May 2007 08:38:17 -0700 (PDT) From: "Ilya Leviev (JIRA)" To: commits@harmony.apache.org Subject: [jira] Created: (HARMONY-3914) [drlvm][thread] Race conditions at "thread_native_basic.c":(480,275) 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_basic.c":(480,275) -------------------------------------------------------------------- Key: HARMONY-3914 URL: https://issues.apache.org/jira/browse/HARMONY-3914 Project: Harmony Issue Type: Bug Components: DRLVM Environment: win2003 Reporter: Ilya Leviev TC report on thread unsafe access that result in race condition that occur during concurrent execution of hythread_get_thread and hythread_detach functions. Read -> Write data-race Memory write at "thread_native_basic.c":275 conflicts with a prior memory read at "thread_native_basic.c":480 Stack Trace: Context Function jthread_create "thread_java_basic.c":63 Function jthread_create_with_function "thread_java_basic.c":179 Function hythread_create "thread_native_basic.c":165 Function hythread_create_with_group "thread_native_basic.c":136 Function os_thread_create "os_thread.c":37 Function _beginthreadex "threadex.c":145 Function EntryPoint "dllcrt0.c":323 Function threadstartex "threadex.c":241 Function thread_start_proc "thread_native_basic.c":720 Function hythread_detach "thread_native_basic.c":259 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":88 Function unreserve_lock "thread_native_thin_monitor.c":151 Function hythread_get_thread "thread_native_basic.c":480 "479" "" " hythread_t VMCALL hythread_get_thread(IDATA id) {" "480" "*" " return fast_thread_array[id];" "481" "" " }" 2nd Access Function jthread_create "thread_java_basic.c":63 Function jthread_create_with_function "thread_java_basic.c":179 Function hythread_create "thread_native_basic.c":165 Function hythread_create_with_group "thread_native_basic.c":136 Function os_thread_create "os_thread.c":37 Function _beginthreadex "threadex.c":145 Function EntryPoint "dllcrt0.c":323 Function threadstartex "threadex.c":241 Function thread_start_proc "thread_native_basic.c":720 Function hythread_detach "thread_native_basic.c":275 "274" "" " thread_set_self(NULL);" "275" "*" " fast_thread_array[thread->thread_id] = NULL;" "276" "" " " See also Source View screenshot. Notes on Read->write race condition. ------------------------------------ Read->write data races occur when one thread reads a shared memory location (address) while another thread concurrently writes 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: privateA = sharedX 2nd access by second thread S2: sharedX = privateB 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 what value will be read from sharedX and written into privateA. 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.