Fixed memory leak concerning library ecrt_master_deactivate().

This commit is contained in:
Florian Pose 2019-06-14 12:42:52 +02:00
parent c5979ef566
commit d8a487fc8c
5 changed files with 25 additions and 21 deletions

View File

@ -1,8 +1,6 @@
/*****************************************************************************
*
* $Id$
*
* Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH
* Copyright (C) 2006-2019 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT master userspace library.
*
@ -64,6 +62,7 @@ void ec_master_clear_config(ec_master_t *master)
while (d) {
next_d = d->next;
ec_domain_clear(d);
free(d);
d = next_d;
}
master->first_domain = NULL;
@ -72,19 +71,22 @@ void ec_master_clear_config(ec_master_t *master)
while (c) {
next_c = c->next;
ec_slave_config_clear(c);
free(c);
c = next_c;
}
master->first_config = NULL;
if (master->process_data) {
munmap(master->process_data, master->process_data_size);
master->process_data = NULL;
master->process_data_size = 0;
}
}
/****************************************************************************/
void ec_master_clear(ec_master_t *master)
{
if (master->process_data) {
munmap(master->process_data, master->process_data_size);
}
ec_master_clear_config(master);
if (master->fd != -1) {
@ -93,6 +95,7 @@ void ec_master_clear(ec_master_t *master)
#else
close(master->fd);
#endif
master->fd = -1;
}
}
@ -408,7 +411,7 @@ int ecrt_master_sdo_download(ec_master_t *master, uint16_t slave_position,
*abort_code = download.abort_code;
}
fprintf(stderr, "Failed to execute SDO download: %s\n",
strerror(EC_IOCTL_ERRNO(ret)));
strerror(EC_IOCTL_ERRNO(ret)));
return -EC_IOCTL_ERRNO(ret);
}
@ -437,7 +440,7 @@ int ecrt_master_sdo_download_complete(ec_master_t *master,
*abort_code = download.abort_code;
}
fprintf(stderr, "Failed to execute SDO download: %s\n",
strerror(EC_IOCTL_ERRNO(ret)));
strerror(EC_IOCTL_ERRNO(ret)));
return -EC_IOCTL_ERRNO(ret);
}

View File

@ -1,8 +1,6 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2012 Florian Pose, Ingenieurgemeinschaft IgH
* Copyright (C) 2012-2019 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT master userspace library.
*
@ -48,6 +46,7 @@ void ec_reg_request_clear(ec_reg_request_t *reg)
{
if (reg->data) {
free(reg->data);
reg->data = NULL;
}
}

View File

@ -1,8 +1,6 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH
* Copyright (C) 2006-2019 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT master userspace library.
*
@ -48,6 +46,7 @@ void ec_sdo_request_clear(ec_sdo_request_t *req)
{
if (req->data) {
free(req->data);
req->data = NULL;
}
}

View File

@ -1,8 +1,6 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH
* Copyright (C) 2006-2019 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT master userspace library.
*
@ -53,22 +51,28 @@ void ec_slave_config_clear(ec_slave_config_t *sc)
while (r) {
next_r = r->next;
ec_sdo_request_clear(r);
free(r);
r = next_r;
}
sc->first_sdo_request = NULL;
e = sc->first_reg_request;
while (e) {
next_e = e->next;
ec_reg_request_clear(e);
free(e);
e = next_e;
}
sc->first_reg_request = NULL;
v = sc->first_voe_handler;
while (v) {
next_v = v->next;
ec_voe_handler_clear(v);
free(v);
v = next_v;
}
sc->first_voe_handler = NULL;
}
/*****************************************************************************/

View File

@ -1,8 +1,6 @@
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH
* Copyright (C) 2006-2019 Florian Pose, Ingenieurgemeinschaft IgH
*
* This file is part of the IgH EtherCAT master userspace library.
*
@ -49,6 +47,7 @@ void ec_voe_handler_clear(ec_voe_handler_t *voe)
{
if (voe->data) {
free(voe->data);
voe->data = NULL;
}
}