]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix `KAT(CCM)?Parser` file descriptor leaks
authorngie <ngie@FreeBSD.org>
Tue, 21 May 2019 02:30:43 +0000 (02:30 +0000)
committerngie <ngie@FreeBSD.org>
Tue, 21 May 2019 02:30:43 +0000 (02:30 +0000)
commit44c71394c9b817164603f00a34e1001b853e9c88
tree8844634aabe5ea0f36fda1cba7b5d9d638682832
parentbb62553aa37decccc49fb96cbdb22f76f7ca7dc7
Fix `KAT(CCM)?Parser` file descriptor leaks

Make `KAT(CCM)?Parser` into a context suite-capable object by implementing
`__enter__` and `__exit__` methods which manage opening up the file descriptors
and closing them on context exit. This implementation was decided over adding
destructor logic to a `__del__` method, as there are a number of issues around
object lifetimes when dealing with threading cleanup, atexit handlers, and a
number of other less obvious edgecases. Plus, the architected solution is more
pythonic and clean.

Complete the iterator implementation by implementing a `__next__` method for
both classes which handles iterating over the data using a generator pattern,
and by changing `__iter__` to return the object instead of the data which it
would iterate over. Alias the `__next__` method to `next` when working with
python 2.x in order to maintain functional compatibility between the two major
versions.

As part of this work and to ensure readability, push the initialization of the
parser objects up one layer and pass it down to a helper function. This could
have been done via a decorator, but I was trying to keep it simple for other
developers to make it easier to modify in the future.

This fixes ResourceWarnings with python 3.

PR: 237403
MFC after: 1 week
Tested with: python 2.7.16 (amd64), python 3.6.8 (amd64)
tests/sys/opencrypto/cryptodev.py
tests/sys/opencrypto/cryptotest.py