Micah is not on the mailing list and asked me to respond to this message for
him.

"Oops, I meant to say JavaObject instead of RubyObject in the description
for this issue. I couldn't find a way to modify the description. If someone
has a moment and the ability correct the post, please do."

On 11/12/07, Micah Alles (JIRA) <[EMAIL PROTECTED]> wrote:
>
> JavaObject.wrap synchronizing on the java instance can cause deadlock
> ---------------------------------------------------------------------
>
>                  Key: JRUBY-1559
>                  URL: http://jira.codehaus.org/browse/JRUBY-1559
>              Project: JRuby
>           Issue Type: Bug
>           Components: Java Integration
>     Affects Versions: JRuby 1.1b1, JRuby 1.0.2, JRuby 1.0.1, JRuby 1.0.0
>          Environment: OS X Leopard / Tiger
> Windows Vista / XP / 2000
> Linux
> Java 1.5.x and 1.6.x
> JRuby 1.0, 1.0.1, 1.0.2, 1.1b and edge
>             Reporter: Micah Alles
>             Priority: Critical
>              Fix For: JRuby 1.0.3, JRuby 1.1
>          Attachments: deadlock.tgz, java_object_wrap_locking.diff
>
> In JavaObject.wrap(...) a RubyObject is created which corresponds to an
> instance of a java object.  The java instance is currently used to
> synchronize access to the cached RubyObjects.
>
> Synchronizing on the java instance can be inherently dangerous due to the
> common practice in java of declaring public methods synchronized and using
> non-private instances for synchronized blocks.
>
> This problem has affected our development of a desktop application when
> using the Batik library through jruby.  One of the classes which is a part
> of their public API followed the practice described above of using publicly
> available objects as a monitor for synchronization.  The combination of that
> practice and the way JavaObject.wrap was locking on the same java instance
> caused periodic deadlock in our application.
>
> I've included a patch and a small sample project with a test case which
> results in deadlock with the current JavaObject.wrap implementation and
> successfully runs to completion with the patch applied.  The patch
> synchronizes on the RubyObject wrapper instance instead of the java
> instance.
>
> To run the test from within the included project:
> {{rake test jruby=path/to/jruby}}
>
>
> --
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the administrators:
> http://jira.codehaus.org/secure/Administrators.jspa
> -
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>

Reply via email to