Browse Source

kscheme: Fix named udata store

Serj Kalichev 4 months ago
parent
commit
4e2ca05aaf
2 changed files with 8 additions and 1 deletions
  1. 3 1
      klish/kscheme/kscheme.c
  2. 5 0
      klish/ksession/kustore.c

+ 3 - 1
klish/kscheme/kscheme.c

@@ -78,9 +78,11 @@ void kscheme_free(kscheme_t *scheme)
 	if (!scheme)
 		return;
 
+	// kustore_free() must be before plugin_free() because plugin_free()
+	// does dlclose() and ustore free function is will not be accessible
+	kustore_free(scheme->ustore);
 	faux_list_free(scheme->plugins);
 	faux_list_free(scheme->entrys);
-	kustore_free(scheme->ustore);
 
 	faux_free(scheme);
 }

+ 5 - 0
klish/ksession/kustore.c

@@ -71,6 +71,11 @@ kudata_t *kustore_slot_new(kustore_t *ustore,
 	kudata_set_data(udata, data);
 	kudata_set_free_fn(udata, free_fn);
 
+	if (!kustore_add_udatas(ustore, udata)) {
+		kudata_free(udata);
+		return NULL;
+	}
+
 	return udata;
 }