master/canopen.c
changeset 448 e4b76dc7910c
parent 441 ffa13db95e10
child 484 9fde4a17b820
equal deleted inserted replaced
447:ee53be7e18ee 448:e4b76dc7910c
   130 
   130 
   131 /*****************************************************************************/
   131 /*****************************************************************************/
   132 
   132 
   133 /**
   133 /**
   134    SDO destructor.
   134    SDO destructor.
   135 */
   135    Clears and frees an SDO object.
   136 
   136 */
   137 void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */)
   137 
   138 {
   138 void ec_sdo_destroy(ec_sdo_t *sdo /**< SDO */)
   139     ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj);
   139 {
   140     ec_sdo_entry_t *entry, *next;
   140     ec_sdo_entry_t *entry, *next;
   141 
   141 
   142     // free all entries
   142     // free all entries
   143     list_for_each_entry_safe(entry, next, &sdo->entries, list) {
   143     list_for_each_entry_safe(entry, next, &sdo->entries, list) {
   144         list_del(&entry->list);
   144         list_del(&entry->list);
   145         kobject_del(&entry->kobj);
   145         ec_sdo_entry_destroy(entry);
   146         kobject_put(&entry->kobj);
   146     }
   147     }
   147 
       
   148     // destroy self
       
   149     kobject_del(&sdo->kobj);
       
   150     kobject_put(&sdo->kobj);
       
   151 }
       
   152 
       
   153 /*****************************************************************************/
       
   154 
       
   155 /**
       
   156    Clear and free SDO.
       
   157    This method is called by the kobject,
       
   158    once there are no more references to it.
       
   159 */
       
   160 
       
   161 void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */)
       
   162 {
       
   163     ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj);
   148 
   164 
   149     if (sdo->name) kfree(sdo->name);
   165     if (sdo->name) kfree(sdo->name);
   150 
   166 
   151     kfree(sdo);
   167     kfree(sdo);
   152 }
   168 }
   213 }
   229 }
   214 
   230 
   215 /*****************************************************************************/
   231 /*****************************************************************************/
   216 
   232 
   217 /**
   233 /**
   218    SDO destructor.
   234    SDO entry destructor.
       
   235    Clears and frees an SDO entry object.
       
   236 */
       
   237 
       
   238 void ec_sdo_entry_destroy(ec_sdo_entry_t *entry /**< SDO entry */)
       
   239 {
       
   240     // destroy self
       
   241     kobject_del(&entry->kobj);
       
   242     kobject_put(&entry->kobj);
       
   243 }
       
   244 
       
   245 /*****************************************************************************/
       
   246 
       
   247 /**
       
   248    Clear and free SDO entry.
       
   249    This method is called by the kobject,
       
   250    once there are no more references to it.
   219 */
   251 */
   220 
   252 
   221 void ec_sdo_entry_clear(struct kobject *kobj /**< SDO entry's kobject */)
   253 void ec_sdo_entry_clear(struct kobject *kobj /**< SDO entry's kobject */)
   222 {
   254 {
   223     ec_sdo_entry_t *entry = container_of(kobj, ec_sdo_entry_t, kobj);
   255     ec_sdo_entry_t *entry = container_of(kobj, ec_sdo_entry_t, kobj);