[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