First, I made Dick's change about complete with a minor wording
change. I is the change to p. 5/1-4. It is now:
The call informs \MPI/ that the operations which the generalized request
\mpiarg{request} represents are complete. (See definitions in
Section~\ref{terms})
A call to \mpifunc{MPI\_WAIT(request)} will return and a call to
\mpifunc{MPI\_TEST(request, flag)} will return \mpiarg{flag=true}
only after a call to \mpifunc{MPI\_GREQUEST\_COMPLETE} has declared that
these operations are complete.
Second I am still not thrilled with the distinction between freeing
and deallocating which allows user copies of a request for a GR to still
be valid until after the free_fn call. However, others think it is
fine and I have no better solution. Thus, I insert to p. 4/6:
The \mpiarg{request} is not deallocated until after the
\mpifunc{free\_fn} completes.
and add to p. 4/8:
\begin{users}
Calling \mpifunc{MPI\_REQUEST\_FREE(request)} will cause the
\mpiarg{request} handle to be set to \consti{MPI\_REQUEST\_NULL}.
This handle to the generalized request is no longer valid. However,
user copies of this handle are valid until after the
\mpifunc{free\_fn} completes since \MPI/ does not deallocate its
internal copy until then. Since the \mpifunc{free\_fn} is not
called until after \mpifunc{MPI\_GREQUEST\_COMPLETE}, the user copy of
the handle can be used to make this call. Users should note that
\MPI/ will deallocate its internal copy after the \mpifunc{free\_fn}
executes. At this point user copies of the \mpiarg{request} handle no
longer point to a valid request. \MPI/ will not set user copies to
\consti{MPI\_REQUEST\_NULL} in this case so it is up to the user to
avoid accessing this stale handle.
\end{users}