Commit 326c880b authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 6b345422
......@@ -86,6 +86,18 @@ class tMapping(object):
# XXX assertData
# assertBlkFaults asserts that mmap[·] with · corresponding to blk raises
# SIGSEGV on read access.
def assertBlkFaults(t, blk):
assert t.mmap.blk_start <= blk < t.mmap.blk_stop
blk_inmmap = blk - t.mmap.blk_start
fh = t.mmap.fileh
blkview = t.mmap.mem[blk_inmmap*fh.blksize:][:fh.blksize]
for i in range(0, len(blkview), 8): # XXX 8 too frequent?
read_mustfault(blkview[i:][:1])
# fhpinned(fh) returns fh.pinned with rev wrapped into tAt.
# XXX better wrap FileH into tFileH and do this automatically in .pinned ?
def fhpinned(t, fh):
......@@ -186,15 +198,20 @@ def test_wcfs_client_down_efault():
tm1.assertBlk(2, 'c1', {})
tm1.assertBlk(3, 'd1', {})
with panics("not faulted"): read_mustfault(m1.mem[0*zf.blksize:][:1])
with panics("not faulted"): read_mustfault(m1.mem[1*zf.blksize:][:1])
with panics("not faulted"): tm1.assertBlkFaults(2)
with panics("not faulted"): tm1.assertBlkFaults(3)
#with panics("not faulted"): read_mustfault(m1.mem[0*zf.blksize:][:1])
#with panics("not faulted"): read_mustfault(m1.mem[1*zf.blksize:][:1])
assert m1.mem[0*zf.blksize] == b'c'
assert m1.mem[1*zf.blksize] == b'd'
return
#assert m1.mem[0*zf.blksize] == b'c'
#assert m1.mem[1*zf.blksize] == b'd'
# close fileh -> m1 must turn into efaulting memory
# XXX verify whole block?
fh.close()
read_mustfault(m1.mem[0*zf.blksize:][:1])
read_mustfault(m1.mem[1*zf.blksize:][:1])
tm1.assertBlkFaults(1) # XXX
tm1.assertBlkFaults(2)
tm1.assertBlkFaults(3)
......@@ -138,8 +138,13 @@ def read_mustfault(const unsigned char[::1] mem not None):
with nogil:
mustfaultMu.lock()
_read_mustfault(&mem[0])
mustfaultMu.unlock() # XXX not released on panic
try:
with nogil:
_read_mustfault(&mem[0])
finally:
with nogil:
mustfaultMu.unlock()
# --------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment