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.