[PATCH] Removed potential reference count races

max at mtew.isa-geek.net max at mtew.isa-geek.net
Sat Oct 27 20:59:34 CDT 2012


From: Max TenEyck Woodbury <max at mtew.isa-geek.net>

---
 dlls/vbscript/vbdisp.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index b37caf6..fc26cd9 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -35,7 +35,7 @@ static BOOL get_func_id(vbdisp_t *This, const WCHAR *name, vbdisp_invoke_type_t
 {
     unsigned i;
 
-    for(i = invoke_type == VBDISP_ANY ? 0 : 1; i < This->desc->func_cnt; i++) {
+    for(i = invoke_type == VBDISP_ANY ? 0 : 1; i < This->desc->func_cnt; ++i) {
         if(invoke_type == VBDISP_ANY) {
             if(!search_private && !This->desc->funcs[i].is_public)
                 continue;
@@ -63,7 +63,7 @@ HRESULT vbdisp_get_id(vbdisp_t *This, BSTR name, vbdisp_invoke_type_t invoke_typ
     if(get_func_id(This, name, invoke_type, search_private, id))
         return S_OK;
 
-    for(i=0; i < This->desc->prop_cnt; i++) {
+    for(i=0; i < This->desc->prop_cnt; ++i) {
         if(!search_private && !This->desc->props[i].is_public)
             continue;
 
@@ -89,7 +89,7 @@ static VARIANT *get_propput_arg(const DISPPARAMS *dp)
 {
     unsigned i;
 
-    for(i=0; i < dp->cNamedArgs; i++) {
+    for(i=0; i < dp->cNamedArgs; ++i) {
         if(dp->rgdispidNamedArgs[i] == DISPID_PROPERTYPUT)
             return dp->rgvarg+i;
     }
@@ -184,7 +184,7 @@ static HRESULT invoke_builtin(vbdisp_t *This, const builtin_prop_t *prop, WORD f
 
     assert(argn < sizeof(args)/sizeof(*args));
 
-    for(i=0; i < argn; i++) {
+    for(i=0; i < argn; ++i) {
         if(V_VT(dp->rgvarg+dp->cArgs-i-1) == (VT_BYREF|VT_VARIANT))
             args[i] = *V_VARIANTREF(dp->rgvarg+dp->cArgs-i-1);
         else
@@ -205,10 +205,10 @@ static BOOL run_terminator(vbdisp_t *This)
     if(!This->desc->class_terminate_id)
         return TRUE;
 
-    This->ref++;
+    InterlockedIncrement(&This->ref);
     exec_script(This->desc->ctx, This->desc->funcs[This->desc->class_terminate_id].entries[VBDISP_CALLGET],
             (IDispatch*)&This->IDispatchEx_iface, &dp, NULL);
-    return !--This->ref;
+    return !InterlockedDecrement(&This->ref);
 }
 
 static void clean_props(vbdisp_t *This)
@@ -218,7 +218,7 @@ static void clean_props(vbdisp_t *This)
     if(!This->desc)
         return;
 
-    for(i=0; i < This->desc->prop_cnt; i++)
+    for(i=0; i < This->desc->prop_cnt; ++i)
         VariantClear(This->props+i);
 }
 
@@ -682,7 +682,7 @@ static HRESULT WINAPI ScriptDisp_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
     TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
           lcid, rgDispId);
 
-    for(i=0; i < cNames; i++) {
+    for(i=0; i < cNames; ++i) {
         hres = IDispatchEx_GetDispID(&This->IDispatchEx_iface, rgszNames[i], 0, rgDispId+i);
         if(FAILED(hres))
             return hres;
@@ -715,7 +715,7 @@ static HRESULT WINAPI ScriptDisp_GetDispID(IDispatchEx *iface, BSTR bstrName, DW
     if(!This->ctx)
         return E_UNEXPECTED;
 
-    for(ident = This->ident_map; ident < This->ident_map+This->ident_map_cnt; ident++) {
+    for(ident = This->ident_map; ident < This->ident_map+This->ident_map_cnt; ++ident) {
         if(!strcmpiW(ident->name, bstrName)) {
             *pid = ident_to_id(This, ident);
             return S_OK;
-- 
1.7.7.6




More information about the wine-patches mailing list