dataset: Fix memory leak destroying a dataset that has a permanent_dict.
[pspp] / src / data / dataset.c
index c426cddb3c5662846865828d41650665481f6647..4313cac8758aace9f07f214fd012179cd7664add 100644 (file)
@@ -143,9 +143,7 @@ dataset_create_finish__ (struct dataset *ds, struct session *session)
 struct dataset *
 dataset_create (struct session *session, const char *name)
 {
-  struct dataset *ds;
-
-  ds = xzalloc (sizeof *ds);
+  struct dataset *ds = XZALLOC (struct dataset);
   ds->name = xstrdup (name);
   ds->display = DATASET_FRONT;
   ds->dict = dict_create (get_default_encoding ());
@@ -200,6 +198,7 @@ dataset_destroy (struct dataset *ds)
       dataset_set_session (ds, NULL);
       dataset_clear (ds);
       dict_unref (ds->dict);
+      dict_unref (ds->permanent_dict);
       caseinit_destroy (ds->caseinit);
       trns_chain_destroy (ds->permanent_trns_chain);
       dataset_transformations_changed__ (ds, false);
@@ -818,7 +817,7 @@ store_case_num (void *var_, struct ccase **cc, casenumber case_num)
   struct variable *var = var_;
 
   *cc = case_unshare (*cc);
-  case_data_rw (*cc, var)->f = case_num;
+  *case_num_rw (*cc, var) = case_num;
 
   return TRNS_CONTINUE;
 }
@@ -939,7 +938,7 @@ add_filter_trns (struct dataset *ds)
 /* FILTER transformation. */
 static int
 filter_trns_proc (void *filter_var_,
-                  struct ccase **c UNUSED, casenumber case_nr UNUSED)
+                  struct ccase **c, casenumber case_nr UNUSED)
 
 {
   struct variable *filter_var = filter_var_;