[ 
https://issues.apache.org/jira/browse/IGNITE-1884?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15000129#comment-15000129
 ] 

Pavel  Tupitsyn commented on IGNITE-1884:
-----------------------------------------

1,2) Both of these cases go down to ThrowToJava. It just sets an exception in 
Java, but does not affect C++ program flow. So the handle won't leak.
http://mindprod.com/jgloss/jni.html#EXCEPTIONS

However, in future there may be the case with C++ or some other client where 
exceptions are possible. I'll address this with a wrapper/destructor.

3,4) Creating a wrapper and checking thread id would also introduce an 
overhead. Before doing this, we need to make sure if that is actually faster 
than GlobalRef. Let's do that separately.

> .Net: JNI local ref can't be accessed from another thread
> ---------------------------------------------------------
>
>                 Key: IGNITE-1884
>                 URL: https://issues.apache.org/jira/browse/IGNITE-1884
>             Project: Ignite
>          Issue Type: Bug
>          Components: interop
>    Affects Versions: 1.1.4
>            Reporter: Pavel  Tupitsyn
>            Assignee: Pavel  Tupitsyn
>            Priority: Blocker
>             Fix For: 1.5
>
>
> Documentation: 
> https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/design.html
> {code}
> Local references are only valid in the thread in which they are created. The 
> native code must not pass local references from one thread to another.
> {code}
> We have two places where we DO pass local JNI reference to another thread:
> * CacheParallelLoadStoreAdapter
> * CacheTestStore.LoadCache
> And, potentially (due to user code):
> * UnmanagedCallbacks.DataStreamerStreamReceiverInvoke
> For some reason it has worked for us before.
> But renamings in IGNITE-1881 have caused test execution order to change, and 
> these store tests cause process crash.
> To reproduce, BinaryBuilderSelfTest (former PortableApiSelfTest) has to be 
> executed before store tests. All other tests can be excluded. 100% repro 
> rate: "FATAL ERROR in native method: Bad global or local ref passed to JNI".



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to