Just because it's volatile doesn't mean that adds are atomic. There's at
least one place in the PML (or used to be) where two threads could
decrement that counter at the same time.
Brian
On Mon, 23 Jun 2008, Jeff Squyres wrote:
I see in a few places in ob1 we do things like this:
OPAL_THREAD_ADD32(&sendreq->req_state, -1);
Why do we do this? req_state is technically an enum value, so we shouldn't
be adding/subtracting to it (granted, it looks like the enum values were
carefully chosen to allow this). Additionally, req_state is volatile; the
atomics shouldn't be necessary.
Is there some other non-obvious reason?
Also, I see this in a few places:
req->req_state = 2;
which really should be
req->req_state = OMPI_REQUEST_ACTIVE;