Changeset 37316 in vbox
- Timestamp:
- Jun 3, 2011 12:49:02 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 72071
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/mangling.h
r37234 r37316 847 847 # define RTNetTCPChecksum RT_MANGLER(RTNetTCPChecksum) 848 848 # define RTNetUDPChecksum RT_MANGLER(RTNetUDPChecksum) 849 # define RTOnce RT_MANGLER(RTOnce)849 # define RTOnceSlow RT_MANGLER(RTOnceSlow) 850 850 # define RTOnceReset RT_MANGLER(RTOnceReset) 851 851 # define RTPathAbs RT_MANGLER(RTPathAbs) -
trunk/include/iprt/once.h
r33262 r37316 29 29 #include <iprt/cdefs.h> 30 30 #include <iprt/types.h> 31 #include <iprt/asm.h> 31 32 #include <iprt/err.h> 32 33 … … 120 121 * @param pvUser2 The second user parameter for pfnOnce. 121 122 */ 122 RTDECL(int) RTOnce(PRTONCE pOnce, PFNRTONCE pfnOnce, void *pvUser1, void *pvUser2); 123 RTDECL(int) RTOnceSlow(PRTONCE pOnce, PFNRTONCE pfnOnce, void *pvUser1, void *pvUser2); 124 125 /** 126 * Serializes execution of the pfnOnce function, making sure it's 127 * executed exactly once and that nobody returns from RTOnce before 128 * it has executed successfully. 129 * 130 * @returns IPRT like status code returned by pfnOnce. 131 * 132 * @param pOnce Pointer to the execute once variable. 133 * @param pfnOnce The function to executed once. 134 * @param pvUser1 The first user parameter for pfnOnce. 135 * @param pvUser2 The second user parameter for pfnOnce. 136 */ 137 DECLINLINE(int) RTOnce(PRTONCE pOnce, PFNRTONCE pfnOnce, void *pvUser1, void *pvUser2) 138 { 139 int32_t iState = ASMAtomicUoReadS32(&pOnce->iState); 140 if (RT_LIKELY( iState == RTONCESTATE_DONE 141 || iState == RTONCESTATE_DONE_CREATING_SEM 142 || iState == RTONCESTATE_DONE_HAVE_SEM )) 143 return ASMAtomicUoReadS32(&pOnce->rc); 144 return RTOnceSlow(pOnce, pfnOnce, pvUser1, pvUser2); 145 } 123 146 124 147 /** -
trunk/src/VBox/Runtime/common/misc/once.cpp
r33262 r37316 157 157 158 158 159 RTDECL(int) RTOnce (PRTONCE pOnce, PFNRTONCE pfnOnce, void *pvUser1, void *pvUser2)159 RTDECL(int) RTOnceSlow(PRTONCE pOnce, PFNRTONCE pfnOnce, void *pvUser1, void *pvUser2) 160 160 { 161 161 /* … … 244 244 return rcOnce; 245 245 } 246 RT_EXPORT_SYMBOL(RTOnce );246 RT_EXPORT_SYMBOL(RTOnceSlow); 247 247 248 248
Note:
See TracChangeset
for help on using the changeset viewer.