Skip to content

Commit f071ffd

Browse files
committed
All tests work, bumped version
1 parent 70fae1f commit f071ffd

File tree

5 files changed

+14
-5
lines changed

5 files changed

+14
-5
lines changed

doc/source/changes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Changelog
33
#########
44

55
**********
6-
v0.8.6
6+
v0.9.0
77
**********
88
- Fixed issue with resources never being freed as mmaps were never closed.
99
- Client counting is now done manually, instead of relying on pyton's reference count

smmap/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
__author__ = "Sebastian Thiel"
44
__contact__ = "[email protected]"
55
__homepage__ = "https://github.com/Byron/smmap"
6-
version_info = (0, 8, 5)
6+
version_info = (0, 9, 0)
77
__version__ = '.'.join(str(i) for i in version_info)
88

99
# make everything available in root package for convenience

smmap/buf.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def __getslice__(self, i, j):
9393
l -= len(d)
9494
# This is slower than the join ... but what can we do ...
9595
out += d
96+
del(d)
9697
# END while there are bytes to read
9798
return out
9899
else:
@@ -103,6 +104,10 @@ def __getslice__(self, i, j):
103104
d = c.buffer()[:l]
104105
ofs += len(d)
105106
l -= len(d)
107+
# Make sure we don't keep references, as c.use_region() might attempt to free resources, but
108+
# can't unless we use pure bytes
109+
if hasattr(d, 'tobytes'):
110+
d = d.tobytes()
106111
md.append(d)
107112
# END while there are bytes to read
108113
return bytes().join(md)

smmap/mman.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def _destroy(self):
5858
# Free all resources associated with the mapped file
5959
self._manager._fdict.pop(self._rlist.path_or_fd())
6060
# END remove regions list from manager
61-
except TypeError:
61+
except (TypeError, KeyError):
6262
# sometimes, during shutdown, getrefcount is None. Its possible
6363
# to re-import it, however, its probably better to just ignore
6464
# this python problem (for now).
@@ -70,11 +70,14 @@ def _destroy(self):
7070
def _copy_from(self, rhs):
7171
"""Copy all data from rhs into this instance, handles usage count"""
7272
self._manager = rhs._manager
73-
self._rlist = rhs._rlist
73+
self._rlist = type(rhs._rlist)(rhs._rlist)
7474
self._region = rhs._region
7575
self._ofs = rhs._ofs
7676
self._size = rhs._size
7777

78+
for region in self._rlist:
79+
region.increment_client_count()
80+
7881
if self._region is not None:
7982
self._region.increment_client_count()
8083
# END handle regions

smmap/test/test_buf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from time import time
1313
import sys
1414
import os
15-
import logging
1615

1716

1817
man_optimal = SlidingWindowMapManager()
@@ -104,6 +103,7 @@ def test_basics(self):
104103
assert len(d) == ofs_end - ofs_start
105104
assert d == data[ofs_start:ofs_end]
106105
num_bytes += len(d)
106+
del d
107107
else:
108108
pos = randint(0, fsize)
109109
assert buf[pos] == data[pos]
@@ -122,6 +122,7 @@ def test_basics(self):
122122
% (man_id, max_num_accesses, mode_str, type(item), num_bytes / mb, elapsed, (num_bytes / mb) / elapsed),
123123
file=sys.stderr)
124124
# END handle access mode
125+
del buf
125126
# END for each manager
126127
# END for each input
127128
os.close(fd)

0 commit comments

Comments
 (0)