嗨,约翰,
我正在试验你在 #1160 中提到的近似卷积,但我遇到了一个持续的段错误,但只在卷积 ushort 图像时。 根据图像的大小,我可以在 python 或 libvips 中使段错误发生,所以我想这可能是双重免费的。 这是一个带有一些实验的测试程序,以查看问题发生的位置。 下面是 libvips.so.42.9.0 中段错误位置的堆栈跟踪(目前没有使用调试版本,所以可能没有那么有用)。
我正在使用 python Python 2.7.15 :: Anaconda custom (64-bit)
下的 pyvips 接口运行 vips vips-8.7.0-Sun Jan 28 17:23:05 UTC 2018
Python 2.7.15 :: Anaconda custom (64-bit)
提前致谢。
注意:实际上是一个 .py 文件:
段错误.txt
# /usr/bin/env python
import pyvips
slab = pyvips.Image.new_from_array([[1]*10]*10, scale=100) # 10x10 moving average
n = 30000 # also segfaults when n=30000. See note below.
# The following are all fine
uchar_im = pyvips.Image.black(n, n).cast('uchar') # just to be sure it's uchar
uchar_im.conv(slab, precision='approximate', layers=1).write_to_file('uchar_conv.v')
float_im = pyvips.Image.black(n, n).cast('float')
float_im.conv(slab, precision='approximate', layers=1).write_to_file('float_conv.v')
# EVERY CONVOLUTION BELOW THIS LINE SEGFAULTS
# if n=1, completes by writing result to file, then segfaults in python:
# *** Error in `python': free(): invalid pointer: 0x00005651d79154c0 ***
# if n=30000, does not complete and segfaults in libvips
# [1049087.739802] worker[599]: segfault at 7f4cd631a000 ip 00007f4ce7f93318 sp 00007f4cd2caea70 error 4 in libvips.so.42.9.0[7f4ce7eb6000+1f5000]
ushort_im = pyvips.Image.black(n, n).cast('ushort')
ushort_im.conv(slab.cast('ushort'), precision='approximate', layers=1).write_to_file('ushort_conv.v') # segfault happens here
ushort_im = pyvips.Image.black(n, n).cast('ushort')
ushort_im.conv(slab, precision='approximate', layers=1).write_to_file('ushort_conv.v') # segfault would also happen here
short_im = pyvips.Image.black(n, n).cast('short')
short_im.conv(slab, precision='approximate', layers=1).write_to_file('short_conv.v') # segfault would also happen here
当 n=30000 时可能相关的堆栈跟踪:
Thread 52 "worker" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe64d5700 (LWP 4069)]
0x00007ffff4ab4c7d in ?? () from /usr/lib/libvips.so.42
(gdb) up
#1 0x00007ffff4b4e411 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#2 0x00007ffff4b4f0c9 in vips_region_fill () from /usr/lib/libvips.so.42
(gdb) up
#3 0x00007ffff4b50d53 in vips_region_prepare () from /usr/lib/libvips.so.42
(gdb) up
#4 0x00007ffff4ab65b3 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#5 0x00007ffff4b4e411 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#6 0x00007ffff4b4f0c9 in vips_region_fill () from /usr/lib/libvips.so.42
(gdb) up
#7 0x00007ffff4b50d53 in vips_region_prepare () from /usr/lib/libvips.so.42
(gdb) up
#8 0x00007ffff4b40d59 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#9 0x00007ffff4b4e411 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#10 0x00007ffff4b4f0c9 in vips_region_fill () from /usr/lib/libvips.so.42
(gdb) up
#11 0x00007ffff4b50d53 in vips_region_prepare () from /usr/lib/libvips.so.42
(gdb) up
#12 0x00007ffff4b40d59 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#13 0x00007ffff4b4e411 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#14 0x00007ffff4b4f0c9 in vips_region_fill () from /usr/lib/libvips.so.42
(gdb) up
#15 0x00007ffff4b50d53 in vips_region_prepare () from /usr/lib/libvips.so.42
(gdb) up
#16 0x00007ffff4b40d59 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#17 0x00007ffff4b4e411 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#18 0x00007ffff4b4f615 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#19 0x00007ffff4b50f5f in vips_region_prepare_to () from /usr/lib/libvips.so.42
(gdb) up
#20 0x00007ffff4b48228 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#21 0x00007ffff4b5171b in ?? () from /usr/lib/libvips.so.42
(gdb) up
#22 0x00007ffff4b51504 in ?? () from /usr/lib/libvips.so.42
(gdb) up
#23 0x00007ffff44e0a8a in g_thread_proxy (data=0x5555559df720) from /opt/anaconda/lib/libglib-2.0.so.0
(gdb) up
#24 0x00007ffff77e36ba in start_thread (arg=0x7fffe64d5700) at pthread_create.c:333
333 pthread_create.c: No such file or directory.
请注意,上面的 segfault.txt 链接实际上是带有测试程序的 .py 文件,因为 github 不允许附加 .py 文件。
是的, conva
并不是真正的生产质量,遗憾的是:( 我会看看。
我正在做一些园艺问题🌱🌿🌷,遇到了这个问题。 由于它已经很老了,我只是想问这是否仍然相关? 如果不是,也许我们可以关闭这个问题?
通过关闭一些旧问题,我们将未解决的问题列表减少到一个更易于管理的集合。
这是一个需要修复的错误,所以我认为应该保持打开状态。
最有用的评论
这是一个需要修复的错误,所以我认为应该保持打开状态。