The dsset returned by dns_keynode_dsset needs to be thread safe.
- clone keynode->dsset rather than return a pointer so that thread use is independent of each other. - hold a reference to the dsset (keynode) so it can't be deleted while in use. - create a new keynode when removing DS records so that dangling pointers to the deleted records will not occur. - use a rwlock when accessing the rdatalist to prevent instabilities when DS records are added.
Showing with 275 additions and 101 deletions