Add getChars to CharSequence

Martin Buchholz martinrb at google.com
Sun May 19 20:33:19 UTC 2013


On Thu, May 9, 2013 at 5:38 AM, Alan Bateman <Alan.Bateman at oracle.com>wrote:

> On 08/05/2013 23:05, Martin Buchholz wrote:
>
>> Alan (et al): Ping.
>>
>>  I've looked through the webrev.
>
> The scary part is subsequenceRaw where the offsets including the position.
> I don't see anything obviously wrong and the tests should catch any issues.
> I don't see any issue conditionally generating the isDirect/order methods
> although it should been harmless.
>

Yes, it's scary, but it's much scarier to me carrying around relative
positions than absolute because position() can change at any time if there
is a data race.  So after bounds checking we must work with absolute
positions, or at least must when working with Unsafe.

---

Existing code is a little schizoid about checking for the possibility of
limit() < position(), as can happen with a data race.  Sometimes checked;
sometimes not.  Sometimes assert()ed.  Sometimes adjusted.  Probably the
right thing is to check and throw ConcurrentModificationException if
detected.  But not in this changeset.

        int pos = this.position();
        int lim = this.limit();
        assert (pos <= lim);
        int rem = (pos <= lim ? lim - pos : 0);



More information about the core-libs-dev mailing list