diff --git a/lib/master.c b/lib/master.c index 193d7e576847489c0f97a1078f6bac440ef0f763..9b208bb9f3279a7fdbecaef2ca1edb2d009d895b 100644 --- a/lib/master.c +++ b/lib/master.c @@ -53,21 +53,18 @@ int ecrt_master_reserve(ec_master_t *master) /*****************************************************************************/ -void ec_master_clear(ec_master_t *master) +void ec_master_clear_config(ec_master_t *master) { ec_domain_t *d, *next_d; ec_slave_config_t *c, *next_c; - if (master->process_data) { - munmap(master->process_data, master->process_data_size); - } - d = master->first_domain; while (d) { next_d = d->next; ec_domain_clear(d); d = next_d; } + master->first_domain = NULL; c = master->first_config; while (c) { @@ -75,6 +72,18 @@ void ec_master_clear(ec_master_t *master) ec_slave_config_clear(c); c = next_c; } + master->first_config = NULL; +} + +/*****************************************************************************/ + +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) { close(master->fd); @@ -456,8 +465,9 @@ void ecrt_master_deactivate(ec_master_t *master) fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno)); return; } -} + ec_master_clear_config(master); +} /*****************************************************************************/ @@ -472,7 +482,6 @@ int ecrt_master_set_send_interval(ec_master_t *master,size_t send_interval_us) return 0; } - /*****************************************************************************/ void ecrt_master_send(ec_master_t *master)