8000 tiny cleanups · libvips/pyvips@965406d · GitHub
[go: up one dir, main page]

Skip to content

Commit 965406d

Browse files
committed
tiny cleanups
mysterious segvs in stream persist it looks like the read callback becomes invalid somehow -- the first error is the read marshaler not being called when the read signal is emitted
1 parent 4e677e5 commit 965406d

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

pyvips/gobject.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ def _marshal_read(streamiu, pointer, length, handle):
5757
@ffi.def_extern()
5858
def _marshal_seek(streamiu, offset, whence, handle):
5959
callback = ffi.from_handle(handle)
60-
result = callback(offset, whence)
61-
return result
60+
return callback(offset, whence)
6261
_marshal_seek_cb = \
6362
ffi.cast('GCallback', gobject_lib._marshal_seek)
6463
else:
@@ -75,8 +74,7 @@ def _marshal_seek(streamiu, offset, whence, handle):
7574
def _marshal_write(streamiu, pointer, length, handle):
7675
buf = ffi.buffer(pointer, length)
7776
callback = ffi.from_handle(handle)
78-
result = callback(buf)
79-
return result
77+
return callback(buf)
8078
_marshal_write_cb = \
8179
ffi.cast('GCallback', gobject_lib._marshal_write)
8280
else:

tests/test_streams.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,30 @@ def new(name, pipe_mode=False):
2727
self.name = name
2828
self.pipe_mode = pipe_mode
2929
self.loaded_bytes = open(name, 'rb').read()
30-
self.memory = memoryview(loaded_bytes)
30+
self.memory = memoryview(self.loaded_bytes)
3131
self.length = len(self.loaded_bytes)
3232
self.read_point = 0
3333

3434
return self.build()
3535

3636
def read_cb(self, buf):
37-
#print('read: {0} bytes ...'.format(len(buf)))
37+
# print('read: {0} bytes ...'.format(len(buf)))
3838
p = self.read_point
3939
bytes_available = self.length - p
4040
bytes_to_copy = min(bytes_available, len(buf))
4141
buf[:bytes_to_copy] = self.memory[p:p + bytes_to_copy]
4242
self.read_point += bytes_to_copy
43+
# print(' copied from position {0}'.format(p))
4344

4445
return bytes_to_copy
4546

4647
def seek_cb(self, offset, whence):
47-
#print('seek: offset = {0}, whence = {1} ...'.format(offset, whence))
48+
# print('seek: offset = {0}, whence = {1} ...'.format(offset, whence))
49+
50+
if self.pipe_mode:
51+
# print(' -1 (pipe mode)')
52+
return -1
53+
4854
if whence == 0:
4955
# SEEK_SET
5056
new_read_point = offset
@@ -58,12 +64,9 @@ def seek_cb(self, offset, whence):
5864
raise Exception('bad whence {0}'.format(whence))
5965

6066
self.read_point = max(0, min(self.length, new_read_point))
61-
#print(' new read_point = {0}'.format(self.read_point))
67+
# print(' new read_point = {0}'.format(self.read_point))
6268

63-
if self.pipe_mode:
64-
return -1
65-
else:
66-
return self.read_point
69+
return self.read_point
6770

6871

6972
class Mystreamo(pyvips.Streamou):
@@ -90,14 +93,14 @@ def new(name):
9093
return self.build()
9194

9295
def write_cb(self, buf):
93-
#print('write: {0} bytes ...'.format(len(buf)))
94-
96+
# print('write: {0} bytes ...'.format(len(buf)))
97+
# py2 write does not return number of bytes written
9598
self.f.write(buf)
9699

97100
return len(buf)
98101

99102
def finish_cb(self):
100-
#print('finish: ...')
103+
# print('finish: ...')
101104
self.f.close()
102105

103106

@@ -128,8 +131,8 @@ def test_streamu(self):
128131
streamou = Mystreamo.new(filename)
129132
image.write_to_stream(streamou, '.png')
130133

131-
image = pyvips.Image.new_from_file(JPEG_FILE)
132-
image2 = pyvips.Image.new_from_file(filename)
134+
image = pyvips.Image.new_from_file(JPEG_FILE, access='sequential')
135+
image2 = pyvips.Image.new_from_file(filename, access='sequential')
133136

134137
assert abs(image - image2).abs().max() < 10
135138

@@ -142,7 +145,7 @@ def test_streamu_pipe(self):
142145
streamou = Mystreamo.new(filename)
143146
image.write_to_stream(streamou, '.png')
144147

145-
image = pyvips.Image.new_from_file(JPEG_FILE)
146-
image2 = pyvips.Image.new_from_file(filename)
148+
image = pyvips.Image.new_from_file(JPEG_FILE, access='sequential')
149+
image2 = pyvips.Image.new_from_file(filename, access='sequential')
147150

148151
assert abs(image - image2).abs().max() < 10

0 commit comments

Comments
 (0)
0