diff --git a/dlls/dnsapi/record.c b/dlls/dnsapi/record.c
index 958403172d8bd1a74493e78554118dd457a7ae1f..9755a3d1a9f8b7cbd15fe1d1ae6ff940cbcdbdda 100644
--- a/dlls/dnsapi/record.c
+++ b/dlls/dnsapi/record.c
@@ -680,7 +680,7 @@ BOOL WINAPI DnsRecordSetCompare( PDNS_RECORD set1, PDNS_RECORD set2,
                 DNS_RRSET_ADD( rr1, u );
                 ret = FALSE;
             }
-            else heap_free( u );
+            else DnsRecordListFree( u, DnsFreeRecordList );
         }
     }
 
@@ -696,7 +696,7 @@ BOOL WINAPI DnsRecordSetCompare( PDNS_RECORD set1, PDNS_RECORD set2,
                 DNS_RRSET_ADD( rr2, u );
                 ret = FALSE;
             }
-            else heap_free( u );
+            else DnsRecordListFree( u, DnsFreeRecordList );
         }
     }
 
@@ -704,7 +704,10 @@ BOOL WINAPI DnsRecordSetCompare( PDNS_RECORD set1, PDNS_RECORD set2,
     DNS_RRSET_TERMINATE( rr2 );
     
     if (diff1) *diff1 = rr1.pFirstRR;
+    else DnsRecordListFree( rr1.pFirstRR, DnsFreeRecordList );
+
     if (diff2) *diff2 = rr2.pFirstRR;
+    else DnsRecordListFree( rr2.pFirstRR, DnsFreeRecordList );
 
     return ret;
 
diff --git a/dlls/dnsapi/tests/record.c b/dlls/dnsapi/tests/record.c
index 5d68bd41872d979907df5e0ce3c819abe761ee04..8ce0f3dd1798c71acc3a7172be7e5eba9b21adca 100644
--- a/dlls/dnsapi/tests/record.c
+++ b/dlls/dnsapi/tests/record.c
@@ -89,9 +89,11 @@ static void test_DnsRecordSetCompare( void )
 
     ok( DnsRecordSetCompare( rr1.pFirstRR, NULL, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" );
     ok( diff1 != NULL && diff2 == NULL, "unexpected result: %p, %p\n", diff1, diff2 );
+    DnsRecordListFree( diff1, DnsFreeRecordList );
 
     ok( DnsRecordSetCompare( NULL, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" );
     ok( diff1 == NULL && diff2 != NULL, "unexpected result: %p, %p\n", diff1, diff2 );
+    DnsRecordListFree( diff2, DnsFreeRecordList );
 
     ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, NULL, &diff2 ) == TRUE, "failed unexpectedly\n" );
     ok( diff2 == NULL, "unexpected result: %p\n", diff2 );
@@ -105,8 +107,14 @@ static void test_DnsRecordSetCompare( void )
     r2.Data.A.IpAddress = 0;
 
     ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, NULL, &diff2 ) == FALSE, "succeeded unexpectedly\n" );
+    DnsRecordListFree( diff2, DnsFreeRecordList );
+
     ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, NULL ) == FALSE, "succeeded unexpectedly\n" );
+    DnsRecordListFree( diff1, DnsFreeRecordList );
+
     ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" );
+    DnsRecordListFree( diff1, DnsFreeRecordList );
+    DnsRecordListFree( diff2, DnsFreeRecordList );
 }
 
 static void test_DnsRecordSetDetach( void )