Per http://forum.dlang.org/post/[email protected], calling the destructor of a struct member inside a class may do things like dereferencing a counter. Currently destructors don't have special provisions for working from multiple threads (e.g. File uses thread-local reference counting).
A possible approach is calling each destructor from the same thread that created the object.
One possibility is we may deem the lapse benign, i.e. if a refcounted struct has gotten all the way down to being collected, then a mistake in updating the counter may at worst leave it for the next collection cycle.