This destructor sometimes is called concurrently with existing Service::ExistenceGuard object in another thread
svc\_trace\_manager = NULL;
Variable svc_current_guard is not null exactly in such moment. But after check another thread with ExistenceGuard can continue its work and ExistenceGuard object will be destroyed and svc_current_guard will be released. In this case ~Service will try to leave svc->svc_existence_lock the second time which leads to abort.