Andrew Dinn wrote:
Andrew Dinn wrote:
> Andrew Dinn wrote:
>> It could be a concurrency bug. The relevant code is
>>
>> . . .
>> 105 for (Entry e = header.next; e != header; e = e.next) {
>> 106 if (o.equals(e.element))
>> 107 return index;
>> 108 index++;
>> 109 }
>> . . .
>
> Oops, first off, apologies for posting an analysis which was obviously
> wrong.
Ok, I know I'm replying to my own reply to my reply but I'll just note
that my initial analysis was not 'obviously' wrong. It's actually more
subtle than that as it might just be right depending upon whether the
value of field header is refetched if a yield occurs between execution
of 'e = header.next' and 'e != header'. This may or may not happen at a
compiler's whim since the code does not employ any synchronization.
Anyway, a concurrent remove is a much more likely culprit.
Yes, seems like a concurrent access issue. On the other hand, concurrent access to the
MainDeployer is not really common in the testsuite. There is just the scanner thread and
the
testsuite that may perform deployments/undeployments.