Daniel Lehman : msvcp: Free facet and _Locimp in Locimp dtor.

Alexandre Julliard julliard at winehq.org
Thu Oct 18 14:33:13 CDT 2012


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

Author: Daniel Lehman <dlehman at esri.com>
Date:   Wed Oct 17 12:52:50 2012 -0700

msvcp: Free facet and _Locimp in Locimp dtor.

---

 dlls/msvcp100/locale.c |   22 ++++++++++++----------
 dlls/msvcp60/locale.c  |   22 ++++++++++++----------
 dlls/msvcp71/locale.c  |   22 ++++++++++++----------
 dlls/msvcp90/locale.c  |   23 +++++++++++++----------
 4 files changed, 49 insertions(+), 40 deletions(-)

diff --git a/dlls/msvcp100/locale.c b/dlls/msvcp100/locale.c
index 1d03964..5c2d05c 100644
--- a/dlls/msvcp100/locale.c
+++ b/dlls/msvcp100/locale.c
@@ -7230,17 +7230,17 @@ locale__Locimp* __cdecl locale__Locimp__Locimp_ctor(locale__Locimp *this, const
 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4)
 void __thiscall locale__Locimp_dtor(locale__Locimp *this)
 {
+    MSVCP_size_t i;
+
     TRACE("(%p)\n", this);
 
-    if(locale_facet__Decref(&this->facet)) {
-        MSVCP_size_t i;
-        for(i=0; i<this->facet_cnt; i++)
-            if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
-                call_locale_facet_vector_dtor(this->facetvec[i], 0);
+    locale_facet_dtor(&this->facet);
+    for(i=0; i<this->facet_cnt; i++)
+        if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
+            call_locale_facet_vector_dtor(this->facetvec[i], 1);
 
-        MSVCRT_operator_delete(this->facetvec);
-        _Yarn_char_dtor(&this->name);
-    }
+    MSVCRT_operator_delete(this->facetvec);
+    _Yarn_char_dtor(&this->name);
 }
 
 /* ?_Locimp_dtor at _Locimp@locale at std@@CAXPAV123@@Z */
@@ -7302,7 +7302,7 @@ void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet
     }
 
     if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
-        call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
+        call_locale_facet_vector_dtor(locimp->facetvec[id], 1);
 
     locimp->facetvec[id] = facet;
     if(facet)
@@ -7678,8 +7678,10 @@ locale* locale_ctor(locale *this)
 void locale_dtor(locale *this)
 {
     TRACE("(%p)\n", this);
-    if(this->ptr)
+    if(this->ptr && locale_facet__Decref(&this->ptr->facet)) {
         locale__Locimp_dtor(this->ptr);
+        MSVCRT_operator_delete(this->ptr);
+    }
 }
 
 /* ??4locale at std@@QAEAAV01 at ABV01@@Z */
diff --git a/dlls/msvcp60/locale.c b/dlls/msvcp60/locale.c
index 54e717c..2fc9bd0 100644
--- a/dlls/msvcp60/locale.c
+++ b/dlls/msvcp60/locale.c
@@ -7240,17 +7240,17 @@ static locale__Locimp* locale__Locimp_copy_ctor(locale__Locimp *this, const loca
 /* ??1_Locimp at locale@std@@MEAA at XZ */
 static void locale__Locimp_dtor(locale__Locimp *this)
 {
+    MSVCP_size_t i;
+
     TRACE("(%p)\n", this);
 
-    if(locale_facet__Decref(&this->facet)) {
-        MSVCP_size_t i;
-        for(i=0; i<this->facet_cnt; i++)
-            if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
-                call_locale_facet_vector_dtor(this->facetvec[i], 0);
+    locale_facet_dtor(&this->facet);
+    for(i=0; i<this->facet_cnt; i++)
+        if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
+            call_locale_facet_vector_dtor(this->facetvec[i], 1);
 
-        MSVCRT_operator_delete(this->facetvec);
-        basic_string_char_dtor(&this->name);
-    }
+    MSVCRT_operator_delete(this->facetvec);
+    basic_string_char_dtor(&this->name);
 }
 
 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor, 8)
@@ -7305,7 +7305,7 @@ static void locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *
     }
 
     if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
-        call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
+        call_locale_facet_vector_dtor(locimp->facetvec[id], 1);
 
     locimp->facetvec[id] = facet;
     if(facet)
@@ -7758,8 +7758,10 @@ DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
 void __thiscall locale_dtor(locale *this)
 {
     TRACE("(%p)\n", this);
-    if(this->ptr)
+    if(this->ptr && locale_facet__Decref(&this->ptr->facet)) {
         locale__Locimp_dtor(this->ptr);
+        MSVCRT_operator_delete(this);
+    }
 }
 
 /* ??4locale at std@@QAEAAV01 at ABV01@@Z */
diff --git a/dlls/msvcp71/locale.c b/dlls/msvcp71/locale.c
index 75570c8..658cdb8 100644
--- a/dlls/msvcp71/locale.c
+++ b/dlls/msvcp71/locale.c
@@ -7614,17 +7614,17 @@ locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const
 /* ??1_Locimp at locale@std@@MEAA at XZ */
 static void locale__Locimp_dtor(locale__Locimp *this)
 {
+    MSVCP_size_t i;
+
     TRACE("(%p)\n", this);
 
-    if(locale_facet__Decref(&this->facet)) {
-        MSVCP_size_t i;
-        for(i=0; i<this->facet_cnt; i++)
-            if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
-                call_locale_facet_vector_dtor(this->facetvec[i], 0);
+    locale_facet_dtor(&this->facet);
+    for(i=0; i<this->facet_cnt; i++)
+        if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
+            call_locale_facet_vector_dtor(this->facetvec[i], 1);
 
-        MSVCRT_operator_delete(this->facetvec);
-        MSVCP_basic_string_char_dtor(&this->name);
-    }
+    MSVCRT_operator_delete(this->facetvec);
+    MSVCP_basic_string_char_dtor(&this->name);
 }
 
 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor, 8)
@@ -7679,7 +7679,7 @@ static void locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *
     }
 
     if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
-        call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
+        call_locale_facet_vector_dtor(locimp->facetvec[id], 1);
 
     locimp->facetvec[id] = facet;
     if(facet)
@@ -8133,8 +8133,10 @@ DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
 void __thiscall locale_dtor(locale *this)
 {
     TRACE("(%p)\n", this);
-    if(this->ptr)
+    if(this->ptr && locale_facet__Decref(&this->ptr->facet)) {
         locale__Locimp_dtor(this->ptr);
+        MSVCRT_operator_delete(this);
+    }
 }
 
 /* ??4locale at std@@QAEAAV01 at ABV01@@Z */
diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 1725900..c581d9c 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -7846,17 +7846,17 @@ locale__Locimp* __cdecl locale__Locimp__Locimp_ctor(locale__Locimp *this, const
 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4)
 void __thiscall locale__Locimp_dtor(locale__Locimp *this)
 {
+    MSVCP_size_t i;
+
     TRACE("(%p)\n", this);
 
-    if(locale_facet__Decref(&this->facet)) {
-        MSVCP_size_t i;
-        for(i=0; i<this->facet_cnt; i++)
-            if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
-                call_locale_facet_vector_dtor(this->facetvec[i], 0);
+    locale_facet_dtor(&this->facet);
+    for(i=0; i<this->facet_cnt; i++)
+        if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
+            call_locale_facet_vector_dtor(this->facetvec[i], 1);
 
-        MSVCRT_operator_delete(this->facetvec);
-        MSVCP_basic_string_char_dtor(&this->name);
-    }
+    MSVCRT_operator_delete(this->facetvec);
+    MSVCP_basic_string_char_dtor(&this->name);
 }
 
 /* ?_Locimp_dtor at _Locimp@locale at std@@CAXPAV123@@Z */
@@ -7918,7 +7918,7 @@ void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet
     }
 
     if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
-        call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
+        call_locale_facet_vector_dtor(locimp->facetvec[id], 1);
 
     locimp->facetvec[id] = facet;
     if(facet)
@@ -8380,8 +8380,11 @@ DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
 void __thiscall locale_dtor(locale *this)
 {
     TRACE("(%p)\n", this);
-    if(this->ptr)
+    if(this->ptr && locale_facet__Decref(&this->ptr->facet))
+    {
         locale__Locimp_dtor(this->ptr);
+        MSVCRT_operator_delete(this->ptr);
+    }
 }
 
 /* ??4locale at std@@QAEAAV01 at ABV01@@Z */




More information about the wine-cvs mailing list