diff --git a/tsk/vs/gpt.c b/tsk/vs/gpt.c
index 6a1ba05e2a6a3308c7cf0cc2580b0c7b89b851e5..2ee85c66327f4f701cfd476372de2765a30141c3 100644
--- a/tsk/vs/gpt.c
+++ b/tsk/vs/gpt.c
@@ -339,6 +339,7 @@ tsk_vs_gpt_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset)
 
     /* Load the partitions into the sorted list */
     if (gpt_load_table(vs, PRIMARY_TABLE)) {
+        tsk_vs_part_free(vs);
         int found = 0;
         if (tsk_verbose)
             tsk_fprintf(stderr, "gpt_open: Trying other sector sizes\n");
@@ -351,6 +352,7 @@ tsk_vs_gpt_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset)
                     vs->block_size);
 
             if (gpt_load_table(vs, PRIMARY_TABLE)) {
+                tsk_vs_part_free(vs);
                 vs->block_size *= 2;
                 continue;
             }
@@ -367,6 +369,7 @@ tsk_vs_gpt_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset)
             if(gpt_load_table(vs, SECONDARY_TABLE)){
 
                 /* Try other sector sizes again */
+                tsk_vs_part_free(vs);
                 vs->block_size = 512;
                 while (vs->block_size <= 8192) {
                     if (tsk_verbose)
@@ -374,6 +377,7 @@ tsk_vs_gpt_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset)
                             vs->block_size);
 
                     if (gpt_load_table(vs, SECONDARY_TABLE)) {
+                        tsk_vs_part_free(vs);
                         vs->block_size *= 2;
                         continue;
                     }