harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ilya Berezhniuk (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-4298) [drlvm][thread]1 EUT testcase from teamcvs suite intermittently crashes since r549864
Date Fri, 29 Jun 2007 19:25:04 GMT

    [ 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
> 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.

View raw message