Do we also need to check if it is a derived buffer type like we do in DefaultByteBufHolder ? To be honest I think if free is not supported by the ByteBuf impl it should not throw an UnsupportedOperation exception but just do nothing.