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. >>> >>> >