> On Apr 1, 2016, at 4:31 PM, Roger Riggs <roger.ri...@oracle.com> wrote:
> 
> Hi Peter,
> 
> I overlooked the introduction of another nested class (Task) to handle the 
> cleanup.
> But there are too many changes to see which ones solve a single problem.
> 
> Sorry to make more work, but I think we need to go back to the minimum 
> necessary
> change to make progress on this. Omit all of the little cleanups until the end
> or do them first and separately.
> 

+1.

That’d really help the reviewers. 

thanks
Mandy

> Thanks, Roger
> 
> 
> 
> 
> On 4/1/16 5:51 PM, Roger Riggs wrote:
>> Hi Peter,
>> 
>> Thanks for the diffs to look at.
>> 
>> Two observations on the changes.
>> 
>> - The Cleaner instance was intentionally and necessarily different than the 
>> CleanerImpl to enable
>> the CleanerImpl and its thread to terminate if the Cleaner is not longer 
>> referenced.
>> Folding them into a single object breaks that.
>> 
>> Perhaps it is not too bad for ExtendedCleaner to subclass CleanerImpl with 
>> the cleanup helper/supplier behavior
>> and expose itself to Bits. There will be fewer moving parts. There is no 
>> need for two factory methods for
>> ExtendedCleaner unless you are going to use  a separate ThreadFactory.
>> 
>> - The Deallocator (and now Allocator) nested classes are identical, and 
>> there is a separate copy for each
>> type derived from the Direct-X-template.  But it may not be worth fixing 
>> until the rest of it is settled to avoid
>> more moving parts.
>> 
>> I don't have an opinion on the code changes in Reference, that's different 
>> kettle of fish.
>> 
>> More next week.
>> 
>> Have a good weekend, Roger
>> 
>> 
>> On 4/1/2016 12:46 PM, Peter Levart wrote:
>>> 
>>> 
>>> On 04/01/2016 06:08 PM, Peter Levart wrote:
>>>> 
>>>> 
>>>> On 04/01/2016 05:18 PM, Peter Levart wrote:
>>>>> @Roger:
>>>>> 
>>>>> ...
>>>>> 
>>>>> About entanglement between nio Bits and 
>>>>> ExtendedCleaner.retryWhileHelpingClean(). It is the same level of 
>>>>> entanglement as between the DirectByteBuffer constructor and 
>>>>> Cleaner.register(). In both occasions an action is provided to the 
>>>>> Cleaner. Cleaner.register() takes a cleanup action and 
>>>>> ExtendedCleaner.retryWhileHelpingClean() takes a retriable "allocating" 
>>>>> or "reservation" action. "allocation" or "reservation" is the opposite of 
>>>>> cleanup. Both methods are encapsulated in the same object because those 
>>>>> two functions must be coordinated. So I think that collocating them 
>>>>> together makes sense. What do you think?
>>>> 
>>>> ...to illustrate what I mean, here's a variant that totally untangles Bits 
>>>> from Cleaner and moves the whole Cleaner interaction into the 
>>>> DirectByteBuffer itself:
>>>> 
>>>> http://cr.openjdk.java.net/~plevart/jdk9-dev/removeInternalCleaner/webrev.13.part2/
>>>>  
>>>> 
>>>> Notice the symmetry between Cleaner.retryWhileHelpingClean : 
>>>> Cleaner.register and Allocator : Deallocator ?
>>>> 
>>>> 
>>>> Regards, Peter
>>>> 
>>> 
>>> And here's also a diff between webrev.12.part2 and webrev.13.part2:
>>> 
>>> http://cr.openjdk.java.net/~plevart/jdk9-dev/removeInternalCleaner/webrev.diff.12to13.part2/
>>>  
>>> 
>>> Regards, Peter
>>> 
>> 
> 

Reply via email to