One feature added to EventManager has been disconnecting
a participant at runtime. Unfortunatly, then the
manager of this participant is set to nullptr using
the setManager method. But this method also subscribes to the
shutdown event afterwords. This commit checks if the manager
is nullptr and ignore subscribing in that case.
When calling _diableScheduling of the participant to enable the
own participant for scheduling by the manager the process runned in a
deadlock.
Summary:
1. manager locks mutex mutexSchedulingParticipants_
2. calls schedule class function of participants in the
schedulingParticipants_ list
3. there the _disableScheduling function is called by the participant
4. which calls the unschedule function of the manager
5. manager tries to lock mutexSchedulingParticipants_ which is already
locked
Solution:
- this commit adds the following elements to the Manager class:
1. disableScheduleQueue_
2. mutexDisableScheduleQueue_
3. processDisableScheduling_() ( like processConnections() )
- this commit changes the following functions of Manager class:
1. unschedule( ... ) -> now adds given participant to
disableScheduleQueue
2. scheduleProcess_() -> now also calls the class function
processDisableSchedulung_() after processConections_()