pspp-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Dataset and PsppireDict to have their own copy of struct diction


From: John Darrington
Subject: [PATCH] Dataset and PsppireDict to have their own copy of struct dictionary
Date: Sun, 23 Sep 2018 15:02:35 +0200

---
 src/data/dataset.c        | 3 ++-
 src/ui/gui/psppire-dict.c | 8 ++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/data/dataset.c b/src/data/dataset.c
index 7a5a6a4a..15774eec 100644
--- a/src/data/dataset.c
+++ b/src/data/dataset.c
@@ -293,7 +293,8 @@ dataset_set_dict (struct dataset *ds, struct dictionary 
*dict)
   dataset_clear (ds);
 
   dict_destroy (ds->dict);
-  ds->dict = dict;
+  ds->dict = dict_clone (dict);
+
   dict_set_change_callback (ds->dict, dict_callback, ds);
 }
 
diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c
index 0afb8890..eecf81f6 100644
--- a/src/ui/gui/psppire-dict.c
+++ b/src/ui/gui/psppire-dict.c
@@ -288,6 +288,7 @@ psppire_dict_dispose (GObject *object)
   PsppireDict *d = PSPPIRE_DICT (object);
 
   dict_set_callbacks (d->dict, NULL, NULL);
+  dict_destroy (d->dict);
 
   G_OBJECT_CLASS (parent_class)->dispose (object);
 }
@@ -367,7 +368,7 @@ PsppireDict*
 psppire_dict_new_from_dict (struct dictionary *d)
 {
   PsppireDict *new_dict = g_object_new (PSPPIRE_TYPE_DICT, NULL);
-  new_dict->dict = d;
+  new_dict->dict = dict_clone (d);
 
   dict_set_callbacks (new_dict->dict, &gui_callbacks, new_dict);
 
@@ -380,10 +381,13 @@ psppire_dict_replace_dictionary (PsppireDict *dict, 
struct dictionary *d)
 {
   struct variable *var =  dict_get_weight (d);
 
+  assert (dict->dict != d);
+
   guint old_n = dict_get_var_cnt (dict->dict);
   guint new_n = dict_get_var_cnt (d);
 
-  dict->dict = d;
+  dict_destroy (dict->dict);
+  dict->dict = dict_clone (d);
 
   weight_changed_callback (d, var ? var_get_dict_index (var) : -1, dict);
 
-- 
2.11.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]