Review request for 7131793: [macosx] some cleanup in OGL pipeline code

Dmitry Cherepanov dmitry.cherepanov at oracle.com
Tue Jan 31 03:36:30 PST 2012


Mike Swingler wrote:
> On Jan 30, 2012, at 5:59 AM, Dmitry Cherepanov wrote:
>
>   
>> Mike Swingler wrote:
>>
>>     
>>> On Jan 27, 2012, at 7:17 AM, Dmitry Cherepanov wrote:
>>>
>>>       
>>>> Hello,
>>>>
>>>> Here's some changes to remove some stale code from the OGL pipeline. This code has been introduced as a part of the initial implementation for CALayer-based rendering and disabled by the changes for MACOSX_PORT-766.
>>>>
>>>> http://cr.openjdk.java.net/~dcherepanov/7131793/webrev.1/ <http://cr.openjdk.java.net/%7Edcherepanov/7131793/webrev.1/>
>>>>         
>>> One tiny detail: I'd recommend using -jObjectWithEnv: instead of -jObject here (because it's a little faster to not re-fetch the env):
>>> +    JNFCallVoidMethod(env, [self.javaLayer jObject], jm_drawInCGLContext);
>>>       
>> On second thought, seems like -jObject simply returns the global reference that the wrapper holds without obtaining the env. What's the reason for re-fetching the env?
>>     
>
> That is correct...we are returning the global env, I had forgot about that. It doesn't seem safe though, if the wrapper gets dealloc'd while the ref is still held in a local. :-/
>
> As is though, I don't think we can change the API at this point.
>   
Thanks for the clarification.

Mike Swingler wrote:
> On Jan 30, 2012, at 1:52 AM, Sergey Bylokhov wrote:
>   
>>> 124JNFCallVoidMethod(env, [self.javaLayer jObjectWithEnv:env], jm_drawInCGLContext);
>>>
>>> Should we delete a local reference which returned from [self.javaLayer jObjectWithEnv:env]? And check it for null?
>>>       
>> JNFJObjectWrapper.h
>> ......
>> - (jobject) jObjectWithEnv:(JNIEnv *)env; // returns a new local-ref, must be released with DeleteLocalRef
>> ......
>>     
> I believe local refs are collected after the scope of the local function returns, so I don't believe it's strictly necessary.
>
> Is that right?
>   
Seems like it's better to explicitly free local references in native 
callbacks. The doc in 
http://java.sun.com/docs/books/jni/html/refs.html#27567 ("Freeing Local 
References" section) describes:

"Your native method does not return at all. For example, a native method 
may enter an infinite event dispatch loop. It is crucial to release 
local references created inside the loop so that they do not accumulate 
indefinitely, resulting in a memory leak."

Here's the new webrev (with explicit releasing applied) - 
http://cr.openjdk.java.net/~dcherepanov/7131793/webrev.3/

Thanks,
Dmitry



More information about the macosx-port-dev mailing list