Sebastian Lackner : ole32: Fix an invalid usage of InterlockedCompareExchange.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 3 09:42:11 CST 2015


Module: wine
Branch: master
Commit: c23db594aacf69675ebd57936449c412c34f6050
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c23db594aacf69675ebd57936449c412c34f6050

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Tue Mar  3 05:39:46 2015 +0100

ole32: Fix an invalid usage of InterlockedCompareExchange.

---

 dlls/ole32/marshal.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/dlls/ole32/marshal.c b/dlls/ole32/marshal.c
index b308600..c5c2023 100644
--- a/dlls/ole32/marshal.c
+++ b/dlls/ole32/marshal.c
@@ -805,11 +805,12 @@ static HRESULT proxy_manager_construct(
 
 static inline void proxy_manager_set_context(struct proxy_manager *This, MSHCTX dest_context, void *dest_context_data)
 {
-    MSHCTX old_dest_context = This->dest_context;
+    MSHCTX old_dest_context;
     MSHCTX new_dest_context;
 
     do
     {
+        old_dest_context = This->dest_context;
         new_dest_context = old_dest_context;
         /* "stronger" values overwrite "weaker" values. stronger values are
          * ones that disable more optimisations */
@@ -853,7 +854,7 @@ static inline void proxy_manager_set_context(struct proxy_manager *This, MSHCTX
 
         if (old_dest_context == new_dest_context) break;
 
-        old_dest_context = InterlockedCompareExchange((PLONG)&This->dest_context, new_dest_context, old_dest_context);
+        new_dest_context = InterlockedCompareExchange((PLONG)&This->dest_context, new_dest_context, old_dest_context);
     } while (new_dest_context != old_dest_context);
 
     if (dest_context_data)




More information about the wine-cvs mailing list