invalid destruction order of objects IOService first and then IOSignalSetInitializer
the IOSignalSetInitializer is a static instance (variable) which is destroyed after the process IOService single instance is destroyed.
usually the IOService instance is created in the process construction (Dhcpv[4|6]Srv constructor) and then the IOSignalSetInitializer is called/created. On destruction, the IOService is destroyed way before the static instance (variable) IOSignalSetInitializer is destroyed. However the IOSignalSetInitializer calls io_signal_set.remove which accesses IOService internally and is causing read after heap free.
The solution would be for the IOSignalSetInitializer to also save a smart pointer reference to the process IOService, so that the destruction is postponed after io_signal_set.remove is called.