рд╣рд╛рдп рдЬреЙрди,
рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ #резрезремреж рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрдиреБрдорд╛рдирд┐рдд рдХрдирд╡рд▓реНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реЗрдЧрдлреЙрд▓реНрдЯ рдореЗрдВ рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпреВрд╢реЙрд░реНрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордпред рдореИрдВ рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ segfault рдХреЛ рдпрд╛ рддреЛ рдЕрдЬрдЧрд░ рдпрд╛ libvips рдореЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдбрдмрд▓ рдлреНрд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдБ рд╣реЛрддреА рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рдиреАрдЪреЗ libvips.so.42.9.0 рдХреЗ рдЕрдВрджрд░ segfault рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╣реИ (рдЗрд╕ рд╕рдордп рдбрд┐рдмрдЧрд┐рдВрдЧ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ)ред
рдореИрдВ рдЕрдЬрдЧрд░ Python 2.7.15 :: Anaconda custom (64-bit)
рддрд╣рдд pyvips рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ vips vips-8.7.0-Sun Jan 28 17:23:05 UTC 2018
рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ
рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред
рдиреЛрдЯ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ .py рдлрд╝рд╛рдЗрд▓:
segfault.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
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдЧреБрдгрд╡рддреНрддрд╛ рдирд╣реАрдВ рд╣реИ, рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ :( рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ред
рдореИрдВ рдХреБрдЫ рдореБрджреНрджрд╛ рдмрд╛рдЧрд╡рд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рд╣рдо рдЦреБрд▓реЗ рдореБрджреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрдиреАрдп рд╕реЗрдЯ рдореЗрдВ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред