Bugfix: Discovered memory leak.
This commit is contained in:
parent
780ae5af5d
commit
44c00c852d
|
|
@ -415,7 +415,7 @@ int ec_slave_fetch_sdo_entries(ec_slave_t *slave, /**< EtherCAT-Slave */
|
|||
EC_READ_U16(data + 6) != sdo->index || // SDO index
|
||||
EC_READ_U8(data + 8) != i) { // SDO subindex
|
||||
EC_ERR("Invalid entry description response at slave %i while"
|
||||
" fetching SDO 0x%04X:%i!\n", slave->ring_position,
|
||||
" fetching SDO entry 0x%04X:%i!\n", slave->ring_position,
|
||||
sdo->index, i);
|
||||
ec_print_data(data, rec_size);
|
||||
return -1;
|
||||
|
|
@ -434,21 +434,19 @@ int ec_slave_fetch_sdo_entries(ec_slave_t *slave, /**< EtherCAT-Slave */
|
|||
|
||||
if (!(entry = (ec_sdo_entry_t *)
|
||||
kmalloc(sizeof(ec_sdo_entry_t) + data_size + 1, GFP_KERNEL))) {
|
||||
EC_ERR("Failed to allocate entry memory!\n");
|
||||
EC_ERR("Failed to allocate entry!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
entry->subindex = i;
|
||||
entry->data_type = EC_READ_U16(data + 10);
|
||||
entry->bit_length = EC_READ_U16(data + 12);
|
||||
if (!data_size) {
|
||||
entry->name = NULL;
|
||||
}
|
||||
else {
|
||||
entry->name = (uint8_t *) entry + sizeof(ec_sdo_entry_t);
|
||||
memcpy(entry->name, data + 16, data_size);
|
||||
entry->name[data_size] = 0;
|
||||
}
|
||||
|
||||
// memory for name string appended to entry
|
||||
entry->name = (uint8_t *) entry + sizeof(ec_sdo_entry_t);
|
||||
|
||||
memcpy(entry->name, data + 16, data_size);
|
||||
entry->name[data_size] = 0;
|
||||
|
||||
list_add_tail(&entry->list, &sdo->entries);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,9 +86,8 @@ void ec_master_reset(ec_master_t *master
|
|||
|
||||
// Alle Slaves entfernen
|
||||
if (master->slaves) {
|
||||
for (i = 0; i < master->slave_count; i++) {
|
||||
for (i = 0; i < master->slave_count; i++)
|
||||
ec_slave_clear(master->slaves + i);
|
||||
}
|
||||
kfree(master->slaves);
|
||||
master->slaves = NULL;
|
||||
}
|
||||
|
|
@ -108,7 +107,7 @@ void ec_master_reset(ec_master_t *master
|
|||
}
|
||||
|
||||
// EOE-Liste leeren
|
||||
list_for_each_entry_safe(eoe, next_eoe, &master->domains, list) {
|
||||
list_for_each_entry_safe(eoe, next_eoe, &master->eoe_slaves, list) {
|
||||
list_del(&eoe->list);
|
||||
ec_eoe_clear(eoe);
|
||||
kfree(eoe);
|
||||
|
|
@ -411,10 +410,9 @@ int ec_master_bus_scan(ec_master_t *master /**< EtherCAT-Master */)
|
|||
|
||||
if (!master->slave_count) return 0;
|
||||
|
||||
if (!(master->slaves = (ec_slave_t *) kmalloc(master->slave_count
|
||||
* sizeof(ec_slave_t),
|
||||
GFP_KERNEL))) {
|
||||
EC_ERR("Could not allocate memory for slaves!\n");
|
||||
if (!(master->slaves = (ec_slave_t *)
|
||||
kmalloc(master->slave_count * sizeof(ec_slave_t), GFP_KERNEL))) {
|
||||
EC_ERR("Failed to allocate slaves!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -426,9 +424,8 @@ int ec_master_bus_scan(ec_master_t *master /**< EtherCAT-Master */)
|
|||
slave->station_address = i + 1;
|
||||
}
|
||||
|
||||
// For every slave in the list
|
||||
for (i = 0; i < master->slave_count; i++)
|
||||
{
|
||||
// For every slave on the bus
|
||||
for (i = 0; i < master->slave_count; i++) {
|
||||
slave = master->slaves + i;
|
||||
|
||||
// Write station address
|
||||
|
|
@ -461,8 +458,8 @@ int ec_master_bus_scan(ec_master_t *master /**< EtherCAT-Master */)
|
|||
|
||||
// Does the slave support EoE?
|
||||
if (slave->sii_mailbox_protocols & EC_MBOX_EOE) {
|
||||
if (!(eoe = kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) {
|
||||
EC_ERR("Failed to allocate memory for EoE-Object.\n");
|
||||
if (!(eoe = (ec_eoe_t *) kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) {
|
||||
EC_ERR("Failed to allocate EoE-Object.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ ec_device_t *ecdev_register(unsigned int master_index,
|
|||
|
||||
if (!(master->device = (ec_device_t *)
|
||||
kmalloc(sizeof(ec_device_t), GFP_KERNEL))) {
|
||||
EC_ERR("Failed allocating device!\n");
|
||||
EC_ERR("Failed to allocate device!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ void ec_slave_clear(ec_slave_t *slave /**< EtherCAT-Slave */)
|
|||
list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) {
|
||||
list_del(&sdo->list);
|
||||
if (sdo->name) kfree(sdo->name);
|
||||
|
||||
// Alle Entries freigeben
|
||||
list_for_each_entry_safe(en, next_en, &sdo->entries, list) {
|
||||
list_del(&en->list);
|
||||
|
|
@ -541,6 +542,7 @@ int ec_slave_fetch_strings(ec_slave_t *slave, /**< EtherCAT-Slave */
|
|||
return -1;
|
||||
}
|
||||
string->size = size;
|
||||
// string memory appended to string structure
|
||||
string->data = (char *) string + sizeof(ec_eeprom_string_t);
|
||||
memcpy(string->data, data + offset + 1, size);
|
||||
string->data[size] = 0x00;
|
||||
|
|
|
|||
Loading…
Reference in New Issue