You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Ilya Berezhniuk (JIRA)" <ji...@apache.org> on 2007/06/29 21:25:04 UTC

[jira] Commented: (HARMONY-4298) [drlvm][thread]1 EUT testcase from teamcvs suite intermittently crashes since r549864

    [ https://issues.apache.org/jira/browse/HARMONY-4298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12509189 ] 

Ilya Berezhniuk commented on HARMONY-4298:
------------------------------------------

This bug appears for me almost every run on this test. Access violation occurs in hythread_thin_monitor_exit() as well as in hythread_thin_monitor_enter() and hythread_thin_monitor_try_enter().

Where the access violation occurs, I see instructions like these:
-----------
100046F9 8B 10            mov         edx,dword ptr [eax]
100046FB 8B 04 8A         mov         eax,dword ptr [edx+ecx*4]
-----------
First instruction reads lock_table->table pointer from EAX address pointing to lock_table.
Second instruction reads fat monitor pointer from table cell #ECX.

But at the moment of crash EDX value differs from actual lock_table->table value. Debug printing shows that EDX points to previous lock_table->table address which was actual before it was realloc()ated in locktable_put_fat_monitor() function.
lock_table->table is modified under write lock, but all the places where crash occurs are not synchronized.

I see several evident solutions:
1) synchronize places where fat locks are obtained from table - it will possibly lead to significant performance degradation;
2) leave previous table allocated until all fat locks in it will be safe to relocate - it's complicated way, and such waiting can be infinite;
2) don't modify existing table, but just add new table into the list each time when fat lock table needs to grow.  I think it will be cheaper than synchronization, and easier than keeping table copy.

I'm now trying to implement (3) solution.

> [drlvm][thread]1 EUT testcase from teamcvs suite intermittently crashes since r549864 
> --------------------------------------------------------------------------------------
>
>                 Key: HARMONY-4298
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4298
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: Windows XP/2003 ia32
>            Reporter: Nina Rinskaya
>            Priority: Minor
>
> It looks that r549864 commit has introduced a regression: org.eclipse.team.tests.ccvs.core.subscriber.testConcurrentAccessToSyncSet testcase from Eclipse Unit Tests ('teamcvs' suite) intermittently crashes on Windows 2003 (x86) with the following output:
>    [java] Windows reported exception: 0xc0000005
>      [java] Registers:
>      [java]     EAX: 0x00410048, EBX: 0x140e9870, ECX: 0x000022a2, EDX: 0x00383f30
>      [java]     ESI: 0x16e3ed0c, EDI: 0x0b3943f0, ESP: 0x10d6fa78, EBP: 0x13f461f4
>      [java]     EIP: 0x1000430c
>      [java] Stack trace:
>      [java]   0: hythread_thin_monitor_exit (??:-1)
>      [java] <end of stack trace>
> The testcase deals with synchronized resources, and probably the crash happens whyle adding ~1000-5000th element to the synchronized collection. 
> To reproduce:
> Please follow instrcutions at http://wiki.apache.org/harmony/Eclipse_Unit_Tests_Pass_on_DRLVM#How_to_run_EUT.
> The test that fails is org.eclipse.team.tests.ccvs.core.subscriber.testConcurrentAccessToSyncSet, it belongs to the 'teamcvs' suite. Please note that this suite requires a test CVS repository. If you use Build&Test infrastructure scrips to run the suite, you will need to specify in the framework.local.properties file:
>     eut.parameters.optional.testsr=teamcvs
>     eut.parameters.optional.cvs_user=<the account used to connect to the cvs repository>
>     eut.parameters.optional.cvs_password= <the account password>
>     eut.parameters.optional.cvs_host=<the name of the cvs server>
>     eut.parameters.optional.cvs_root=<the repository path>
> If you follow instructions on how to run a single test at http://wiki.apache.org/harmony/Eclipse_Unit_Tests_Pass_on_DRLVM#How_to_run_EUT you will need to do the following additional steps that are specific for this suite:
> When you perform step 4 ("Running the Test Suite from Eclipse SDK"):
> 1. select "org.eclipse.team.tests.cvs.core" as test plug-in to import; if Eclipse reports compilation errors, please add 'eclipse-testing/eclipse/plugins/org.eclipse.core.filesystem*.jar' to the project's build path;
> 2. modify file org.eclipse.team.tests.ccvs.core.CVSTestSetup.java: replace REPOSITORY_LOCATION = System.getProperty("eclipse.cvs.repository");  with REPOSITORY_LOCATION = ":pserver:cvs_username:cvs_password@cvs _host:cvs_root";
> 3. select org.eclipse.team.tests.ccvs.core.AllTests as launching class

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.