\hypertarget{request_2request_8h}{\section{ompi/request/request.h File Reference}
\label{request_2request_8h}\index{ompi/request/request.\+h@{ompi/request/request.\+h}}
}


Top-\/level description of requests.  


{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}mpi.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/class/ompi\+\_\+free\+\_\+list.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/class/opal\+\_\+pointer\+\_\+array.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/threads/condition.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/constants.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/runtime/params.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}request\+\_\+dbg.\+h\char`\"{}}\\*
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
union \hyperlink{unionompi__mpi__object__t}{ompi\+\_\+mpi\+\_\+object\+\_\+t}
\begin{DoxyCompactList}\small\item\em Union for holding several different M\+P\+I pointer types on the request. \end{DoxyCompactList}\item 
struct \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t}
\begin{DoxyCompactList}\small\item\em Main top-\/level request struct definition. \end{DoxyCompactList}\item 
struct \hyperlink{structompi__predefined__request__t}{ompi\+\_\+predefined\+\_\+request\+\_\+t}
\item 
struct \hyperlink{structompi__request__fns__t}{ompi\+\_\+request\+\_\+fns\+\_\+t}
\begin{DoxyCompactList}\small\item\em Replaceable request functions. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{request_2request_8h_a2b5373cc51fb1b4b663be8041b29cf16}{P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D}~(sizeof(void$\ast$) $\ast$ 32)
\begin{DoxyCompactList}\small\item\em Padded struct to maintain back compatibiltiy. \end{DoxyCompactList}\item 
\#define \hyperlink{request_2request_8h_aaf2bebb9625f7398fb2b8bbb761d7dd6}{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T}(\hyperlink{structrequest}{request}, persistent)
\begin{DoxyCompactList}\small\item\em Initialize a request. \end{DoxyCompactList}\item 
\#define \hyperlink{request_2request_8h_ade5d7606b0737ca0d02fff7d5c171bb5}{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I}(\hyperlink{structrequest}{request})
\begin{DoxyCompactList}\small\item\em Finalize a request. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a9c6304f1c4578471d0280280a98f6fbf}{\#define {\bfseries ompi\+\_\+request\+\_\+test}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+test)}\label{request_2request_8h_a9c6304f1c4578471d0280280a98f6fbf}

\item 
\hypertarget{request_2request_8h_a7585420cd902c727eb69651dc5720bb0}{\#define {\bfseries ompi\+\_\+request\+\_\+test\+\_\+any}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+test\+\_\+any)}\label{request_2request_8h_a7585420cd902c727eb69651dc5720bb0}

\item 
\hypertarget{request_2request_8h_a25bd55089eb14af7ee17555f9537f188}{\#define {\bfseries ompi\+\_\+request\+\_\+test\+\_\+all}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+test\+\_\+all)}\label{request_2request_8h_a25bd55089eb14af7ee17555f9537f188}

\item 
\hypertarget{request_2request_8h_ade7a14b0a7816b8a71003e73b0ebe20b}{\#define {\bfseries ompi\+\_\+request\+\_\+test\+\_\+some}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+test\+\_\+some)}\label{request_2request_8h_ade7a14b0a7816b8a71003e73b0ebe20b}

\item 
\hypertarget{request_2request_8h_af7928d4927a27ce1d37d1ff8059c5755}{\#define {\bfseries ompi\+\_\+request\+\_\+wait}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+wait)}\label{request_2request_8h_af7928d4927a27ce1d37d1ff8059c5755}

\item 
\hypertarget{request_2request_8h_a8718fc34b35c83d4d1add98bd7c98735}{\#define {\bfseries ompi\+\_\+request\+\_\+wait\+\_\+any}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+wait\+\_\+any)}\label{request_2request_8h_a8718fc34b35c83d4d1add98bd7c98735}

\item 
\hypertarget{request_2request_8h_ab3e5c8add397c52ef543351bbbc13f63}{\#define {\bfseries ompi\+\_\+request\+\_\+wait\+\_\+all}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+wait\+\_\+all)}\label{request_2request_8h_ab3e5c8add397c52ef543351bbbc13f63}

\item 
\hypertarget{request_2request_8h_aef43889b0f8d48318d057bedcaf1c827}{\#define {\bfseries ompi\+\_\+request\+\_\+wait\+\_\+some}~(ompi\+\_\+request\+\_\+functions.\+req\+\_\+wait\+\_\+some)}\label{request_2request_8h_aef43889b0f8d48318d057bedcaf1c827}

\item 
\hypertarget{request_2request_8h_a9c5cca8dfb566acf206e1cf77e1a6a07}{\#define {\bfseries O\+M\+P\+I\+\_\+\+S\+T\+A\+T\+U\+S\+\_\+\+S\+E\+T}(outstat, instat)~($\ast$(outstat) = $\ast$(instat))}\label{request_2request_8h_a9c5cca8dfb566acf206e1cf77e1a6a07}

\item 
\hypertarget{request_2request_8h_abc5bd808d4dbd16086b44a665d8be30b}{\#define {\bfseries O\+M\+P\+I\+\_\+\+S\+T\+A\+T\+U\+S\+\_\+\+S\+E\+T\+\_\+\+C\+O\+U\+N\+T}(outcount, incount)~($\ast$(outcount) = $\ast$(incount))}\label{request_2request_8h_abc5bd808d4dbd16086b44a665d8be30b}

\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{request_2request_8h_a4bc555d7f0b7bbe08124a8189f1fdcc8}{typedef int($\ast$ {\bfseries ompi\+\_\+request\+\_\+free\+\_\+fn\+\_\+t} )(struct \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$rptr)}\label{request_2request_8h_a4bc555d7f0b7bbe08124a8189f1fdcc8}

\item 
\hypertarget{request_2request_8h_aa59fdd210ae2a70c2988b4d022f8c16e}{typedef int($\ast$ {\bfseries ompi\+\_\+request\+\_\+cancel\+\_\+fn\+\_\+t} )(struct \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$\hyperlink{structrequest}{request}, int flag)}\label{request_2request_8h_aa59fdd210ae2a70c2988b4d022f8c16e}

\item 
\hypertarget{request_2request_8h_ad934b2259235fa47974cb2bb32aad757}{typedef int($\ast$ {\bfseries ompi\+\_\+request\+\_\+complete\+\_\+fn\+\_\+t} )(struct \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$\hyperlink{structrequest}{request})}\label{request_2request_8h_ad934b2259235fa47974cb2bb32aad757}

\item 
\hypertarget{request_2request_8h_aa594b9fcea305c370e894f650db7b432}{typedef union \hyperlink{unionompi__mpi__object__t}{ompi\+\_\+mpi\+\_\+object\+\_\+t} \hyperlink{request_2request_8h_aa594b9fcea305c370e894f650db7b432}{ompi\+\_\+mpi\+\_\+object\+\_\+t}}\label{request_2request_8h_aa594b9fcea305c370e894f650db7b432}

\begin{DoxyCompactList}\small\item\em Union for holding several different M\+P\+I pointer types on the request. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a720f17532f4a127056b0e72e1fe99403}{typedef struct \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} \hyperlink{request_2request_8h_a720f17532f4a127056b0e72e1fe99403}{ompi\+\_\+request\+\_\+t}}\label{request_2request_8h_a720f17532f4a127056b0e72e1fe99403}

\begin{DoxyCompactList}\small\item\em Convenience typedef. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_ac6cdb1c94b0b518270ede2852c72db4d}{typedef struct \\*
\hyperlink{structompi__predefined__request__t}{ompi\+\_\+predefined\+\_\+request\+\_\+t} {\bfseries ompi\+\_\+predefined\+\_\+request\+\_\+t}}\label{request_2request_8h_ac6cdb1c94b0b518270ede2852c72db4d}

\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a0b4a3b1077ea2b0f1852ba9a39f46ab4}{ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t} )(\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$rptr, int $\ast$completed, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)
\begin{DoxyCompactList}\small\item\em Non-\/blocking test for request completion. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_afc1ca54d843526c64de4c328f3bd0af1}{ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$index, int $\ast$completed, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)
\begin{DoxyCompactList}\small\item\em Non-\/blocking test for request completion. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a22582736357018568559b771501b9c40}{ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$completed, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)
\begin{DoxyCompactList}\small\item\em Non-\/blocking test for request completion. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a573d59eea87caf4f678fe266c698bd5f}{ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$outcount, int $\ast$indices, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)
\begin{DoxyCompactList}\small\item\em Non-\/blocking test for some of N requests to complete. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a16e73cfb44f0cf8e5508e8b3d96976cf}{ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t} )(\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$req\+\_\+ptr, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)
\begin{DoxyCompactList}\small\item\em Wait (blocking-\/mode) for one requests to complete. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_afc8d827e080b29f2fea7da85387dfe0d}{ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$index, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)
\begin{DoxyCompactList}\small\item\em Wait (blocking-\/mode) for one of N requests to complete. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a06f6bb4421b4d6d7310b13f8f7c48be7}{ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)
\begin{DoxyCompactList}\small\item\em Wait (blocking-\/mode) for all of N requests to complete. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{request_2request_8h_a5536f0397998114730aed482358f57ab}{ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t} )(size\+\_\+t count, \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$outcount, int $\ast$indices, \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)
\begin{DoxyCompactList}\small\item\em Wait (blocking-\/mode) for some of N requests to complete. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a3733f18b4fec35f6b57689297675007e}{typedef struct \hyperlink{structompi__request__fns__t}{ompi\+\_\+request\+\_\+fns\+\_\+t} \hyperlink{request_2request_8h_a3733f18b4fec35f6b57689297675007e}{ompi\+\_\+request\+\_\+fns\+\_\+t}}\label{request_2request_8h_a3733f18b4fec35f6b57689297675007e}

\begin{DoxyCompactList}\small\item\em Replaceable request functions. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{request_2request_8h_a0648e8bf63798cbee777ff9c5f572564}{B\+E\+G\+I\+N\+\_\+\+C\+\_\+\+D\+E\+C\+L\+S O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{request_2request_8h_a0648e8bf63798cbee777ff9c5f572564}{O\+B\+J\+\_\+\+C\+L\+A\+S\+S\+\_\+\+D\+E\+C\+L\+A\+R\+A\+T\+I\+O\+N} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t})}\label{request_2request_8h_a0648e8bf63798cbee777ff9c5f572564}

\begin{DoxyCompactList}\small\item\em \hyperlink{classRequest}{Request} class. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a66a5239859fd08166b410821969d2d52}{int \hyperlink{request_2request_8h_a66a5239859fd08166b410821969d2d52}{ompi\+\_\+request\+\_\+init} (void)}\label{request_2request_8h_a66a5239859fd08166b410821969d2d52}

\begin{DoxyCompactList}\small\item\em Initialize the M\+P\+I\+\_\+\+Request subsystem; invoked during M\+P\+I\+\_\+\+I\+N\+I\+T. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_af9a883d33ddae63b5141d66a4f85421e}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{request_2request_8h_af9a883d33ddae63b5141d66a4f85421e}{ompi\+\_\+request\+\_\+persistent\+\_\+proc\+\_\+null\+\_\+free} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$\hyperlink{structrequest}{request})}\label{request_2request_8h_af9a883d33ddae63b5141d66a4f85421e}

\begin{DoxyCompactList}\small\item\em Free a persistent request to a M\+P\+I\+\_\+\+P\+R\+O\+C\+\_\+\+N\+U\+L\+L peer (there's no freelist to put it back to, so we have to actually O\+B\+J\+\_\+\+R\+E\+L\+E\+A\+S\+E it). \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a4dc04387f5bed737a0f0eaf41b7c0ea3}{int \hyperlink{request_2request_8h_a4dc04387f5bed737a0f0eaf41b7c0ea3}{ompi\+\_\+request\+\_\+finalize} (void)}\label{request_2request_8h_a4dc04387f5bed737a0f0eaf41b7c0ea3}

\begin{DoxyCompactList}\small\item\em Shut down the M\+P\+I\+\_\+\+Request subsystem; invoked during M\+P\+I\+\_\+\+F\+I\+N\+A\+L\+I\+Z\+E. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a9575c238ef069f155d22825ca64c636f}{static int \hyperlink{request_2request_8h_a9575c238ef069f155d22825ca64c636f}{ompi\+\_\+request\+\_\+cancel} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$\hyperlink{structrequest}{request})}\label{request_2request_8h_a9575c238ef069f155d22825ca64c636f}

\begin{DoxyCompactList}\small\item\em Cancel a pending request. \end{DoxyCompactList}\item 
static int \hyperlink{request_2request_8h_a79718c4a27274bcd3fd7ebdd9be37386}{ompi\+\_\+request\+\_\+free} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$$\ast$\hyperlink{structrequest}{request})
\begin{DoxyCompactList}\small\item\em Free a request. \end{DoxyCompactList}\item 
static int \hyperlink{request_2request_8h_a2eea431fcb33ca89927aaf4d6155b267}{ompi\+\_\+request\+\_\+complete} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$\hyperlink{structrequest}{request}, bool with\+\_\+signal)
\begin{DoxyCompactList}\small\item\em Signal or mark a request as complete. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_ab922a870fc299a7138700fc1b711fdef}{static void \hyperlink{request_2request_8h_ab922a870fc299a7138700fc1b711fdef}{ompi\+\_\+request\+\_\+wait\+\_\+completion} (\hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} $\ast$req)}\label{request_2request_8h_ab922a870fc299a7138700fc1b711fdef}

\begin{DoxyCompactList}\small\item\em Wait a particular request for completion. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{request_2request_8h_ad8ab5aba7e0f71e78e67360e841c8746}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structopal__pointer__array__t}{opal\+\_\+pointer\+\_\+array\+\_\+t} \hyperlink{request_2request_8h_ad8ab5aba7e0f71e78e67360e841c8746}{ompi\+\_\+request\+\_\+f\+\_\+to\+\_\+c\+\_\+table}}\label{request_2request_8h_ad8ab5aba7e0f71e78e67360e841c8746}

\begin{DoxyCompactList}\small\item\em Globals used for tracking requests and request completion. \end{DoxyCompactList}\item 
\hypertarget{request_2request_8h_a77f55091a5d465bdaaf32c0e12a1866e}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C size\+\_\+t {\bfseries ompi\+\_\+request\+\_\+waiting}}\label{request_2request_8h_a77f55091a5d465bdaaf32c0e12a1866e}

\item 
\hypertarget{request_2request_8h_a782afae73d9d6368f5462bd1603198a4}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C size\+\_\+t {\bfseries ompi\+\_\+request\+\_\+completed}}\label{request_2request_8h_a782afae73d9d6368f5462bd1603198a4}

\item 
\hypertarget{request_2request_8h_a498618b9be63b66c40248012526b1afd}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C size\+\_\+t {\bfseries ompi\+\_\+request\+\_\+failed}}\label{request_2request_8h_a498618b9be63b66c40248012526b1afd}

\item 
\hypertarget{request_2request_8h_a90835fc8d5d4b968bac7ac03adaaa100}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int32\+\_\+t {\bfseries ompi\+\_\+request\+\_\+poll}}\label{request_2request_8h_a90835fc8d5d4b968bac7ac03adaaa100}

\item 
\hypertarget{request_2request_8h_a9b462f793c24dbbdb294d5a45342d9ee}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structopal__mutex__t}{opal\+\_\+mutex\+\_\+t} {\bfseries ompi\+\_\+request\+\_\+lock}}\label{request_2request_8h_a9b462f793c24dbbdb294d5a45342d9ee}

\item 
\hypertarget{request_2request_8h_a0cc33c6fcbc924c82e5e29fcac479be9}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structopal__condition__t}{opal\+\_\+condition\+\_\+t} {\bfseries ompi\+\_\+request\+\_\+cond}}\label{request_2request_8h_a0cc33c6fcbc924c82e5e29fcac479be9}

\item 
\hypertarget{request_2request_8h_a279dfe85c6f26cf025cc2b2feb47389a}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \\*
\hyperlink{structompi__predefined__request__t}{ompi\+\_\+predefined\+\_\+request\+\_\+t} {\bfseries ompi\+\_\+request\+\_\+null}}\label{request_2request_8h_a279dfe85c6f26cf025cc2b2feb47389a}

\item 
\hypertarget{request_2request_8h_a1f7449c55dc7e9c83d1ea290d34b32b0}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} {\bfseries ompi\+\_\+request\+\_\+empty}}\label{request_2request_8h_a1f7449c55dc7e9c83d1ea290d34b32b0}

\item 
\hypertarget{request_2request_8h_aae189befffb684d246936028e20dffea}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} {\bfseries ompi\+\_\+status\+\_\+empty}}\label{request_2request_8h_aae189befffb684d246936028e20dffea}

\item 
\hypertarget{request_2request_8h_af9894a0488bf89ba7f650f8b349685df}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structompi__request__fns__t}{ompi\+\_\+request\+\_\+fns\+\_\+t} {\bfseries ompi\+\_\+request\+\_\+functions}}\label{request_2request_8h_af9894a0488bf89ba7f650f8b349685df}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
Top-\/level description of requests. 



\subsection{Macro Definition Documentation}
\hypertarget{request_2request_8h_ade5d7606b0737ca0d02fff7d5c171bb5}{\index{request/request.\+h@{request/request.\+h}!O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I@{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I}}
\index{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I@{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I}!request/request.\+h@{request/request.\+h}}
\subsubsection[{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I}]{\setlength{\rightskip}{0pt plus 5cm}\#define O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+I\+N\+I(
\begin{DoxyParamCaption}
\item[{}]{{\bf request}}
\end{DoxyParamCaption}
)}}\label{request_2request_8h_ade5d7606b0737ca0d02fff7d5c171bb5}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                    \(\backslash\)
    (\hyperlink{structrequest}{request})->req\_state = OMPI\_REQUEST\_INVALID;                        \(\backslash\)
    if (MPI\_UNDEFINED != (\hyperlink{structrequest}{request})->req\_f\_to\_c\_index) \{                 \hyperlink{opal__pointer__array_8h_a765ec92af547b70dd643070d57cf4d1f}{\(\backslash\)}
\hyperlink{opal__pointer__array_8h_a765ec92af547b70dd643070d57cf4d1f}{        opal\_pointer\_array\_set\_item}(&
      \hyperlink{request_2request_8h_ad8ab5aba7e0f71e78e67360e841c8746}{ompi\_request\_f\_to\_c\_table},         \(\backslash\)
                                    (\hyperlink{structrequest}{request})->req\_f\_to\_c\_index, NULL); \(\backslash\)
        (\hyperlink{structrequest}{request})->req\_f\_to\_c\_index = MPI\_UNDEFINED;                    \(\backslash\)
    \}                                                                   \(\backslash\)
\} \textcolor{keywordflow}{while} (0);
\end{DoxyCode}


Finalize a request. 

This is a macro to avoid function call overhead, since this is typically invoked in the critical performance path (since requests may be re-\/used, it is possible that we will have to finalize a request multiple times).

When finalizing a request, if M\+P\+I\+\_\+\+Request\+\_\+f2c() was previously invoked on that request, then this request was added to the f2c table, and we need to remove it

This function should be called only from the M\+P\+I layer. It should never be called from the P\+M\+L. It take care of the upper level clean-\/up. When the user call M\+P\+I\+\_\+\+Request\+\_\+free we should release all M\+P\+I level ressources, so we have to call this function too. 

Referenced by ompi\+\_\+request\+\_\+finalize(), and ompi\+\_\+request\+\_\+persistent\+\_\+proc\+\_\+null\+\_\+free().

\hypertarget{request_2request_8h_aaf2bebb9625f7398fb2b8bbb761d7dd6}{\index{request/request.\+h@{request/request.\+h}!O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T@{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T}}
\index{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T@{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T}!request/request.\+h@{request/request.\+h}}
\subsubsection[{O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define O\+M\+P\+I\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+I\+N\+I\+T(
\begin{DoxyParamCaption}
\item[{}]{{\bf request}, }
\item[{}]{persistent}
\end{DoxyParamCaption}
)}}\label{request_2request_8h_aaf2bebb9625f7398fb2b8bbb761d7dd6}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                              \(\backslash\)
        (\hyperlink{structrequest}{request})->req\_complete = \textcolor{keyword}{false};              \(\backslash\)
        (\hyperlink{structrequest}{request})->req\_state = OMPI\_REQUEST\_INACTIVE; \(\backslash\)
        (\hyperlink{structrequest}{request})->req\_persistent = (persistent);     \(\backslash\)
    \} \textcolor{keywordflow}{while} (0);
\end{DoxyCode}


Initialize a request. 

This is a macro to avoid function call overhead, since this is typically invoked in the critical performance path (since requests may be re-\/used, it is possible that we will have to initialize a request multiple times). \hypertarget{request_2request_8h_a2b5373cc51fb1b4b663be8041b29cf16}{\index{request/request.\+h@{request/request.\+h}!P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D@{P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D}}
\index{P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D@{P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D}!request/request.\+h@{request/request.\+h}}
\subsubsection[{P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D}]{\setlength{\rightskip}{0pt plus 5cm}\#define P\+R\+E\+D\+E\+F\+I\+N\+E\+D\+\_\+\+R\+E\+Q\+U\+E\+S\+T\+\_\+\+P\+A\+D~(sizeof(void$\ast$) $\ast$ 32)}}\label{request_2request_8h_a2b5373cc51fb1b4b663be8041b29cf16}


Padded struct to maintain back compatibiltiy. 

See \hyperlink{communicator_8h_source}{ompi/communicator/communicator.\+h} comments with struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} for full explanation why we chose the following padding construct for predefines. 

\subsection{Typedef Documentation}
\hypertarget{request_2request_8h_a22582736357018568559b771501b9c40}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+test\+\_\+all\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$completed, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)}}\label{request_2request_8h_a22582736357018568559b771501b9c40}


Non-\/blocking test for request completion. 


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em requests} & (I\+N) Array of requests \\
\hline
{\em completed} & (O\+U\+T) Flag indicating wether all requests completed. \\
\hline
{\em statuses} & (O\+U\+T) Array of completion statuses. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status.
\end{DoxyReturn}
This routine returns completed==true if all requests completed without errors have completed. The statuses parameter is only updated if all requests completed. Likewise, the requests array is not modified (no requests freed), unless all requests have completed. \hypertarget{request_2request_8h_afc1ca54d843526c64de4c328f3bd0af1}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+test\+\_\+any\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$index, int $\ast$completed, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}}\label{request_2request_8h_afc1ca54d843526c64de4c328f3bd0af1}


Non-\/blocking test for request completion. 


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em request} & (I\+N) Array of requests \\
\hline
{\em index} & (O\+U\+T) Index of first completed request. \\
\hline
{\em complete} & (O\+U\+T) Flag indicating if index is valid (a request completed). \\
\hline
{\em status} & (O\+U\+T) \hyperlink{classStatus}{Status} of completed request. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status.
\end{DoxyReturn}
Note that upon completion, the request completed without error is freed, and the request handle at index set to N\+U\+L\+L. \hypertarget{request_2request_8h_a0b4a3b1077ea2b0f1852ba9a39f46ab4}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+test\+\_\+fn\+\_\+t)({\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$rptr, int $\ast$completed, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}}\label{request_2request_8h_a0b4a3b1077ea2b0f1852ba9a39f46ab4}


Non-\/blocking test for request completion. 


\begin{DoxyParams}{Parameters}
{\em request} & (I\+N) Array of requests \\
\hline
{\em complete} & (O\+U\+T) Flag indicating if index is valid (a request completed). \\
\hline
{\em status} & (O\+U\+T) \hyperlink{classStatus}{Status} of completed request. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status.
\end{DoxyReturn}
Note that upon completion, the request completed without error is freed, and the request handle at index set to N\+U\+L\+L. \hypertarget{request_2request_8h_a573d59eea87caf4f678fe266c698bd5f}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+test\+\_\+some\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$outcount, int $\ast$indices, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)}}\label{request_2request_8h_a573d59eea87caf4f678fe266c698bd5f}


Non-\/blocking test for some of N requests to complete. 


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em requests} & (I\+N\+O\+U\+T) Array of requests \\
\hline
{\em outcount} & (O\+U\+T) Number of finished requests \\
\hline
{\em indices} & (O\+U\+T) Indices of the finished requests \\
\hline
{\em statuses} & (O\+U\+T) Array of completion statuses. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S, O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+I\+N\+\_\+\+S\+T\+A\+T\+U\+S or failure status. 
\end{DoxyReturn}
\hypertarget{request_2request_8h_a06f6bb4421b4d6d7310b13f8f7c48be7}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+wait\+\_\+all\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)}}\label{request_2request_8h_a06f6bb4421b4d6d7310b13f8f7c48be7}


Wait (blocking-\/mode) for all of N requests to complete. 

This function is slightly different from the M\+P\+I counter-\/part as it does not release the requests completed with error. Instead, the caller is responsible to call the ompi\+\_\+request\+\_\+free.


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em requests} & (I\+N) Array of requests \\
\hline
{\em statuses} & (O\+U\+T) Array of completion statuses. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status. 
\end{DoxyReturn}
\hypertarget{request_2request_8h_afc8d827e080b29f2fea7da85387dfe0d}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+wait\+\_\+any\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$index, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}}\label{request_2request_8h_afc8d827e080b29f2fea7da85387dfe0d}


Wait (blocking-\/mode) for one of N requests to complete. 

This function is slightly different from the M\+P\+I counter-\/part as it does not release the requests completed with error. Instead, the caller is responsible to call the ompi\+\_\+request\+\_\+free.


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em requests} & (I\+N) Array of requests \\
\hline
{\em index} & (O\+U\+T) Index into request array of completed request. \\
\hline
{\em status} & (O\+U\+T) \hyperlink{classStatus}{Status} of completed request. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status. 
\end{DoxyReturn}
\hypertarget{request_2request_8h_a16e73cfb44f0cf8e5508e8b3d96976cf}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+wait\+\_\+fn\+\_\+t)({\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$req\+\_\+ptr, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}}\label{request_2request_8h_a16e73cfb44f0cf8e5508e8b3d96976cf}


Wait (blocking-\/mode) for one requests to complete. 

This function is slightly different from the M\+P\+I counter-\/part as it does not release the requests completed with error. Instead, the caller is responsible to call the ompi\+\_\+request\+\_\+free.


\begin{DoxyParams}{Parameters}
{\em request} & (I\+N) Pointer to request. \\
\hline
{\em status} & (O\+U\+T) \hyperlink{classStatus}{Status} of completed request. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status. 
\end{DoxyReturn}
\hypertarget{request_2request_8h_a5536f0397998114730aed482358f57ab}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t}}
\index{ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t@{ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ ompi\+\_\+request\+\_\+wait\+\_\+some\+\_\+fn\+\_\+t)(size\+\_\+t count, {\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$requests, int $\ast$outcount, int $\ast$indices, {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$statuses)}}\label{request_2request_8h_a5536f0397998114730aed482358f57ab}


Wait (blocking-\/mode) for some of N requests to complete. 

This function is slightly different from the M\+P\+I counter-\/part as it does not release the requests completed with error. Instead, the caller is responsible to call the ompi\+\_\+request\+\_\+free.


\begin{DoxyParams}{Parameters}
{\em count} & (I\+N) Number of requests \\
\hline
{\em requests} & (I\+N\+O\+U\+T) Array of requests \\
\hline
{\em outcount} & (O\+U\+T) Number of finished requests \\
\hline
{\em indices} & (O\+U\+T) Indices of the finished requests \\
\hline
{\em statuses} & (O\+U\+T) Array of completion statuses. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S, O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+I\+N\+\_\+\+S\+T\+A\+T\+U\+S or failure status. 
\end{DoxyReturn}


\subsection{Function Documentation}
\hypertarget{request_2request_8h_a2eea431fcb33ca89927aaf4d6155b267}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+complete@{ompi\+\_\+request\+\_\+complete}}
\index{ompi\+\_\+request\+\_\+complete@{ompi\+\_\+request\+\_\+complete}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+complete}]{\setlength{\rightskip}{0pt plus 5cm}static int ompi\+\_\+request\+\_\+complete (
\begin{DoxyParamCaption}
\item[{{\bf ompi\+\_\+request\+\_\+t} $\ast$}]{request, }
\item[{bool}]{with\+\_\+signal}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{request_2request_8h_a2eea431fcb33ca89927aaf4d6155b267}


Signal or mark a request as complete. 

If with\+\_\+signal is true this will wake any thread pending on the request and ompi\+\_\+request\+\_\+lock should be held while calling this function. If with\+\_\+signal is false, there will signal generated, and no lock required. This is a special case when the function is called from the critical path for small messages, where we know the current execution flow created the request, and is still in the \+\_\+\+S\+T\+A\+R\+T macro. 

References ompi\+\_\+request\+\_\+t\+::req\+\_\+complete, ompi\+\_\+request\+\_\+t\+::req\+\_\+complete\+\_\+cb, and ompi\+\_\+request\+\_\+t\+::req\+\_\+status.

\hypertarget{request_2request_8h_a79718c4a27274bcd3fd7ebdd9be37386}{\index{request/request.\+h@{request/request.\+h}!ompi\+\_\+request\+\_\+free@{ompi\+\_\+request\+\_\+free}}
\index{ompi\+\_\+request\+\_\+free@{ompi\+\_\+request\+\_\+free}!request/request.\+h@{request/request.\+h}}
\subsubsection[{ompi\+\_\+request\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}static int ompi\+\_\+request\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf ompi\+\_\+request\+\_\+t} $\ast$$\ast$}]{request}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{request_2request_8h_a79718c4a27274bcd3fd7ebdd9be37386}


Free a request. 


\begin{DoxyParams}{Parameters}
{\em request} & (I\+N\+O\+U\+T) Pointer to request. \\
\hline
\end{DoxyParams}


Referenced by ompi\+\_\+errhandler\+\_\+request\+\_\+invoke().

