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;


Reply via email to