On 07/30/2015 10:38 AM, Peter Levart wrote:
[This suggests the r.queue = NULL assignment in reallyPoll() should be
moved later, though I think the assignment order in reallyPoll()
doesn't matter.]

I think the assignment to r.queue = NULL in realyPoll() should be moved *before* the assignment to 'head' (which might assign null if 'r' was the last element). Here's why:

Suppose we have a Reference 'r' and it's associated ReferenceQueue 'q'. Currently it can happen that the following evaluates to true, which is surprising:

q.poll() == null && r.isEnqueued()


Regards, Peter

Well, the above condition is not very representative of the situation I'm trying to describe. It can be perfectly legal when racing with enqueueing of the Reference 'r'. But when racing with de-queueing (i.e. poll()) it is surprising. So let me re-phrase the expression which is always surprising when it evaluates to true:

r.isEnqueued() && q.poll() == null && r.isEnqueued()

Regards, Peter

Reply via email to