[PATCH v2 1/3] msado15: Free field objects in recordset.
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Wed Mar 17 22:16:11 CDT 2021
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/msado15/recordset.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index 0b91358f83d..2e684542828 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -92,12 +92,7 @@ static ULONG WINAPI field_Release( Field *iface )
struct field *field = impl_from_Field( iface );
LONG refs = InterlockedDecrement( &field->refs );
TRACE( "%p new refcount %d\n", field, refs );
- if (!refs)
- {
- TRACE( "destroying %p\n", field );
- heap_free( field->name );
- heap_free( field );
- }
+ /* Fields aren't destroyed here */
return refs;
}
@@ -857,6 +852,7 @@ static ULONG WINAPI recordset_AddRef( _Recordset *iface )
static void close_recordset( struct recordset *recordset )
{
ULONG row, col, col_count;
+ ULONG i;
if ( recordset->row_set ) IRowset_Release( recordset->row_set );
recordset->row_set = NULL;
@@ -865,6 +861,13 @@ static void close_recordset( struct recordset *recordset )
col_count = get_column_count( recordset );
recordset->fields->recordset = NULL;
+
+ for (i=0; i < recordset->fields->count; i++)
+ {
+ struct field *field = impl_from_Field( recordset->fields->field[i] );
+ heap_free( field->name );
+ heap_free( field );
+ }
Fields_Release( &recordset->fields->Fields_iface );
recordset->fields = NULL;
--
2.30.1
More information about the wine-devel
mailing list