I just realized I used the wrong bug id for the second webrev linked below. 
Here’s the webrev again, with the correct id:

http://cr.openjdk.java.net/~hannesw/8166187/webrev.01/

Hannes

> Am 23.12.2016 um 12:20 schrieb Hannes Wallnöfer 
> <hannes.wallnoe...@oracle.com>:
> 
> Thanks Attila, I had forgotten cached AST is not just a performance feature.
> 
> I uploaded a new webrev. It pretty much follows your suggestions, except I 
> used a slightly different approach to conditional serialization of cachedAst 
> - I left the field transient and serialize it explicitly if it is an instance 
> of SerializedAst, otherwise write out null. I also added a test case for 
> split stored functions.
> 
> http://cr.openjdk.java.net/~hannesw/8170977/webrev.01/ 
> 
> Hannes
> 
> 
>> Am 22.12.2016 um 16:48 schrieb Attila Szegedi <szege...@gmail.com>:
>> 
>> Hm… cachedAst is essential for split functions; specifically if it contains 
>> a SerializedAst, then its "byte[] serializedAst" field is essential. If 
>> cachedAst is lost, we can reparse an unsplit function from source, but we 
>> can’t reparse fragments of split functions.
>> 
>> I’d suggest instead of making cachedAst transient, we should:
>> 1. make SerializedAst Serializable, and have SerializedAst.cachedAst within 
>> it transient (reference objects aren’t serializable, and we can afford to 
>> lose it anyway).
>> 2. introduce RecompilableScriptFunctionData.writeObject and make sure that 
>> if serializedAst contains a reference (instead of a SerializedAst object) 
>> then we don’t attempt to serialize it — write null instead (this can be 
>> accomplished by just setting serializedAst = null, and maybe re-setting it 
>> back to what it was after defaultWriteObject)
>> 3. make sure there’s a null check on SerializedAst.cachedAst read in 
>> getCachedAst() (as now it can actually be null on deserialization, it was an 
>> invariant that it was never null before)
>> 
>> Attila.
>> 
>>> On 22 Dec 2016, at 16:18, Hannes Wallnöfer <hannes.wallnoe...@oracle.com> 
>>> wrote:
>>> 
>>> Please review: 
>>> 
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8166187
>>> Webrev: http://cr.openjdk.java.net/~hannesw/8166187/webrev/
>>> 
>>> It was actually the combination of having a non-serialisable AST reference 
>>> and not initialising the transient fields of nested functions that caused 
>>> this error.
>>> 
>>> Thanks,
>>> Hannes
>> 
> 

Reply via email to