conform to io.Closer interface