diff -r 656f114153c2 -r 6c4269dca1c2 lib/master.c --- a/lib/master.c Thu Sep 16 08:35:21 2010 +0200 +++ b/lib/master.c Thu Sep 16 08:41:19 2010 +0200 @@ -53,21 +53,18 @@ /*****************************************************************************/ -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 @@ 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 @@ fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno)); return; } -} - + + ec_master_clear_config(master); +} /*****************************************************************************/ @@ -472,7 +482,6 @@ return 0; } - /*****************************************************************************/ void ecrt_master_send(ec_master_t *master)