--- a/master/canopen.c Thu Oct 26 16:45:33 2006 +0000
+++ b/master/canopen.c Fri Oct 27 09:19:58 2006 +0000
@@ -132,19 +132,35 @@
/**
SDO destructor.
-*/
-
-void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */)
-{
- ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj);
+ Clears and frees an SDO object.
+*/
+
+void ec_sdo_destroy(ec_sdo_t *sdo /**< SDO */)
+{
ec_sdo_entry_t *entry, *next;
// free all entries
list_for_each_entry_safe(entry, next, &sdo->entries, list) {
list_del(&entry->list);
- kobject_del(&entry->kobj);
- kobject_put(&entry->kobj);
- }
+ ec_sdo_entry_destroy(entry);
+ }
+
+ // destroy self
+ kobject_del(&sdo->kobj);
+ kobject_put(&sdo->kobj);
+}
+
+/*****************************************************************************/
+
+/**
+ Clear and free SDO.
+ This method is called by the kobject,
+ once there are no more references to it.
+*/
+
+void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */)
+{
+ ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj);
if (sdo->name) kfree(sdo->name);
@@ -215,7 +231,23 @@
/*****************************************************************************/
/**
- SDO destructor.
+ SDO entry destructor.
+ Clears and frees an SDO entry object.
+*/
+
+void ec_sdo_entry_destroy(ec_sdo_entry_t *entry /**< SDO entry */)
+{
+ // destroy self
+ kobject_del(&entry->kobj);
+ kobject_put(&entry->kobj);
+}
+
+/*****************************************************************************/
+
+/**
+ Clear and free SDO entry.
+ This method is called by the kobject,
+ once there are no more references to it.
*/
void ec_sdo_entry_clear(struct kobject *kobj /**< SDO entry's kobject */)