Hi Roger, Dmitry,

May I ask you both to have a last look at this change before I commit? It
took a while for this to go through our internal tests, hence the delay.

New version:
http://cr.openjdk.java.net/~stuefe/webrevs/8150460-linux_close-fdTable/webrev.03/webrev/
Delta to last version:
http://cr.openjdk.java.net/~stuefe/webrevs/8150460-linux_close-fdTable/webrev.02-webrev.03/webrev/

The changes are mostly cosmetic:

- I tweaked a number of comments to make them clearer
- If getrlimit(RLIMIT_NOFILE) returns an error, I now handle this correctly.
- Just for readability, I explicitly initialize global variables instead of
relying on static zero-initialization.
- As Roger requested, I changed accesses to the entry table elements from
using implicit pointer arithmetic to explicit array accesses with "&".

Thank you for your time!

Kind Regards, Thomas

On Sat, Mar 12, 2016 at 8:38 AM, Thomas Stüfe <thomas.stu...@gmail.com>
wrote:

> Thank you Roger!
>
> On Fri, Mar 11, 2016 at 4:26 PM, Roger Riggs <roger.ri...@oracle.com>
> wrote:
>
>> Hi Thomas,
>>
>> When returning the address of the fdentry, the style using &fdTable[fd]
>> is preferred over
>> the implicit pointer arithmetic (as it was in the previous version).
>>
>> Occurs in all 3 deltas:
>>
>> src/java.base/*/native/libnet/*_close.c:
>> +        result = fdTable + fd;
>>
>> and
>> +        result = fdOverflowTable[rootindex] + slabindex;
>>
>> The rest looks fine.
>>
>> Thanks, Roger
>>
>>
>>
>>
>> On 3/10/2016 7:59 AM, Thomas Stüfe wrote:
>>
>>> Thank you Dmitry!
>>>
>>> I will fix the typo before comitting.
>>>
>>> Kind Regards, Thomas
>>>
>>> On Thu, Mar 10, 2016 at 9:19 AM, Dmitry Samersoff <
>>> dmitry.samers...@oracle.com> wrote:
>>>
>>> Thomas,
>>>>
>>>> Looks good for me. But please wait for someone from core-libs team.
>>>>
>>>> PS: Could you also fix a typeo at 79, 51, 53?
>>>>
>>>>      s/initialized/initialization/
>>>>
>>>>   51  * Heap allocated during initialization - one entry per fd
>>>>
>>>> -Dmitry
>>>>
>>>> On 2016-03-10 10:59, Thomas Stüfe wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> may I have a review of this new iteration for this fix?
>>>>>
>>>>> Thank you!
>>>>>
>>>>> Thomas
>>>>>
>>>>> On Thu, Mar 3, 2016 at 5:26 PM, Thomas Stüfe <thomas.stu...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Hi all,
>>>>>>
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8150460
>>>>>>
>>>>>> thanks to all who took the time to review the first version of this
>>>>>> fix!
>>>>>>
>>>>>> This is the new version:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> http://cr.openjdk.java.net/~stuefe/webrevs/8150460-linux_close-fdTable/webrev.02/webrev/
>>>>
>>>>> I reworked the fix, trying to add in all the input I got: This fix uses
>>>>>>
>>>>> a
>>>>
>>>>> simple one-dimensional array, preallocated at startup, for low-value
>>>>>>
>>>>> file
>>>>
>>>>> descriptors. Like the code did before. Only for large values of file
>>>>>> descriptors it switches to an overflow table, organized as two
>>>>>>
>>>>> dimensional
>>>>
>>>>> sparse array of fixed sized slabs, which are allocated on demand. Only
>>>>>>
>>>>> the
>>>>
>>>>> overflow table is protected by a lock.
>>>>>>
>>>>>> For 99% of all cases we will be using the plain simple fdTable
>>>>>> structure
>>>>>> as before. Only for unusually large file descriptor values we will be
>>>>>>
>>>>> using
>>>>
>>>>> this overflow table.
>>>>>>
>>>>>> Memory footprint is kept low: for small values of RLIMIT_NOFILE, we
>>>>>> will
>>>>>> only allocate as much space as we need. Only if file descriptor values
>>>>>>
>>>>> get
>>>>
>>>>> large, memory is allocated in the overflow table.
>>>>>>
>>>>>> Note that I avoided the proposed double-checked locking solution: I
>>>>>> find
>>>>>> it too risky in this place and also unnecessary. When calling
>>>>>>
>>>>> getFdEntry(),
>>>>
>>>>> we will be executing a blocking IO operation afterwards, flanked by two
>>>>>> mutex locks (in startOp and endOp). So, I do not think the third mutex
>>>>>>
>>>>> lock
>>>>
>>>>> in getFdEntry will add much, especially since it is only used in case
>>>>>> of
>>>>>> larger file descriptor values.
>>>>>>
>>>>>> I also added the fix to bsd_close.c and aix_close.c. I do not like
>>>>>> this
>>>>>> code triplication. I briefly played around with unifying this code,
>>>>>> but
>>>>>> this is more difficult than it seems: implementations subtly differ
>>>>>>
>>>>> between
>>>>
>>>>> the three platforms, and solaris implementation is completely
>>>>>>
>>>>> different. It
>>>>
>>>>> may be a worthwhile cleanup, but that would be a separate issue.
>>>>>>
>>>>>> I did some artificial tests to check how the code does with many and
>>>>>>
>>>>> large
>>>>
>>>>> file descriptor values, all seemed to work well. I also ran java/net
>>>>>>
>>>>> jtreg
>>>>
>>>>> tests on Linux and AIX.
>>>>>>
>>>>>> Kind Regards, Thomas
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> Dmitry Samersoff
>>>> Oracle Java development team, Saint Petersburg, Russia
>>>> * I would love to change the world, but they won't give me the sources.
>>>>
>>>>
>>
>

Reply via email to