Thread safe object pool, is this object pool thread safe?
Assuming only PacketPool ever called the Init() and UnInit() methods on a Packet.


I think that's not an assumption you should make. If the user of your code shouldn't call some methods, then don't let him do it, don't just assume that he won't.

What you could do is to return a facade to Packet that doesn't contain the two methods, instead of returning Packet directly.