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