presto
presto copied to clipboard
ffdot_example crashes badly with Anaconda Python
Tested with two different installations of Anaconda python 2.7 on Ubuntu 16.04. Under the system's stock Python 2.7 everything works correctly instead. This might have to do with the C and/or Fortran libraries that are linked during the compilation of the dependencies (PGPLOT, FFTW etc.). I'm investigating this issue, if someone else has experienced similar issues please add to the discussion.
Running on GDB:
(gdb) run
Starting program: /home/mbachett/anaconda/envs/py27/bin/python /home/mbachett/pulsar_software/presto/python/ffdot_example.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Warning: '/home/mbachett/pulsar_software/presto//lib/fftw_wisdom.txt' is not up-to-date.
You should run 'makewisdom'. See $PRESTO/INSTALL.
*** Error in `/home/mbachett/anaconda/envs/py27/bin/python': double free or corruption (out): 0x0000000001068500 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7ffff6d5e725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7ffff6d66f4a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7ffff6d6aabc]
/home/mbachett/pulsar_software/presto/lib/python/_presto.so(+0x10a09)[0x7fffecda3a09]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x8942)[0x7ffff7ada5a2]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x89e)[0x7ffff7adb1ce]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x8596)[0x7ffff7ada1f6]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x89e)[0x7ffff7adb1ce]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyEval_EvalCode+0x32)[0x7ffff7adb2e2]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyRun_FileExFlags+0xb0)[0x7ffff7afb960]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(PyRun_SimpleFileExFlags+0xef)[0x7ffff7afbb3f]
/home/mbachett/anaconda/envs/py27/bin/../lib/libpython2.7.so.1.0(Py_Main+0xca4)[0x7ffff7b11484]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7ffff6d07830]
/home/mbachett/anaconda/envs/py27/bin/python[0x400649]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:03 12587525 /home/mbachett/anaconda/envs/py27/bin/python2.7
00600000-00601000 rw-p 00000000 08:03 12587525 /home/mbachett/anaconda/envs/py27/bin/python2.7
00601000-010ea000 rw-p 00000000 00:00 0 [heap]
7fffdc000000-7fffdc021000 rw-p 00000000 00:00 0
7fffdc021000-7fffe0000000 ---p 00000000 00:00 0
7fffe0115000-7fffe1b17000 rw-p 00000000 00:00 0
7fffe1b17000-7fffe3c24000 r-xp 00000000 08:03 11673449 /home/mbachett/anaconda/envs/py27/lib/libmkl_avx.so
7fffe3c24000-7fffe3e24000 ---p 0210d000 08:03 11673449 /home/mbachett/anaconda/envs/py27/lib/libmkl_avx.so
7fffe3e24000-7fffe3e29000 r--p 0210d000 08:03 11673449 /home/mbachett/anaconda/envs/py27/lib/libmkl_avx.so
(...)
Program received signal SIGABRT, Aborted.
0x00007ffff6d1c418 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) where
#0 0x00007ffff6d1c418 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff6d1e01a in __GI_abort () at abort.c:89
#2 0x00007ffff6d5e72a in __libc_message (do_abort=do_abort@entry=2, fmt=fmt@entry=0x7ffff6e776b0 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff6d66f4a in malloc_printerr (ar_ptr=<optimized out>, ptr=<optimized out>, str=0x7ffff6e777c0 "double free or corruption (out)", action=3) at malloc.c:5007
#4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3868
#5 0x00007ffff6d6aabc in __GI___libc_free (mem=<optimized out>) at malloc.c:2969
#6 0x00007fffecda3a09 in _wrap_corr_rz_plane (self=<optimized out>, args=<optimized out>) at presto_src/presto_wrap.c:18528
#7 0x00007ffff7ada5a2 in call_function (oparg=<optimized out>, pp_stack=0x7fffffffce78) at Python/ceval.c:4350
#8 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2987
#9 0x00007ffff7adb1ce in PyEval_EvalCodeEx (co=0x7fffed9b57b0, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=7, kws=0x7ffff7f30b90,
kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3582
#10 0x00007ffff7ada1f6 in fast_function (nk=<optimized out>, na=7, n=<optimized out>, pp_stack=0x7fffffffd098, func=0x7fffe3e9e7d0) at Python/ceval.c:4445
#11 call_function (oparg=<optimized out>, pp_stack=0x7fffffffd098) at Python/ceval.c:4370
#12 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2987
#13 0x00007ffff7adb1ce in PyEval_EvalCodeEx (co=0x7ffff7ed2eb0, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=0, kws=0x0, kwcount=0,
defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3582
#14 0x00007ffff7adb2e2 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:669
#15 0x00007ffff7afb960 in run_mod (arena=0x6b78c0, flags=0x7fffffffd390, locals=0x7ffff7f6d168, globals=0x7ffff7f6d168, filename=<optimized out>, mod=0x6cbac8)
at Python/pythonrun.c:1376
#16 PyRun_FileExFlags (fp=0x66c310, filename=<optimized out>, start=<optimized out>, globals=0x7ffff7f6d168, locals=0x7ffff7f6d168, closeit=1, flags=0x7fffffffd390)
at Python/pythonrun.c:1362
#17 0x00007ffff7afbb3f in PyRun_SimpleFileExFlags (fp=0x66c310, filename=0x7fffffffd95b "/home/mbachett/pulsar_software/presto/python/ffdot_example.py",
closeit=1, flags=0x7fffffffd390) at Python/pythonrun.c:948
#18 0x00007ffff7b11484 in Py_Main (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:645
#19 0x00007ffff6d07830 in __libc_start_main (main=0x400710 <main>, argc=2, argv=0x7fffffffd4b8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffffffd4a8) at ../csu/libc-start.c:291
#20 0x0000000000400649 in _start ()
(gdb) bt
#0 0x00007ffff6d1c418 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff6d1e01a in __GI_abort () at abort.c:89
#2 0x00007ffff6d5e72a in __libc_message (do_abort=do_abort@entry=2, fmt=fmt@entry=0x7ffff6e776b0 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff6d66f4a in malloc_printerr (ar_ptr=<optimized out>, ptr=<optimized out>, str=0x7ffff6e777c0 "double free or corruption (out)", action=3) at malloc.c:5007
#4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3868
#5 0x00007ffff6d6aabc in __GI___libc_free (mem=<optimized out>) at malloc.c:2969
#6 0x00007fffecda3a09 in _wrap_corr_rz_plane (self=<optimized out>, args=<optimized out>) at presto_src/presto_wrap.c:18528
#7 0x00007ffff7ada5a2 in call_function (oparg=<optimized out>, pp_stack=0x7fffffffce78) at Python/ceval.c:4350
#8 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2987
#9 0x00007ffff7adb1ce in PyEval_EvalCodeEx (co=0x7fffed9b57b0, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=7, kws=0x7ffff7f30b90,
kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3582
#10 0x00007ffff7ada1f6 in fast_function (nk=<optimized out>, na=7, n=<optimized out>, pp_stack=0x7fffffffd098, func=0x7fffe3e9e7d0) at Python/ceval.c:4445
#11 call_function (oparg=<optimized out>, pp_stack=0x7fffffffd098) at Python/ceval.c:4370
#12 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2987
#13 0x00007ffff7adb1ce in PyEval_EvalCodeEx (co=0x7ffff7ed2eb0, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=0, kws=0x0, kwcount=0,
defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3582
#14 0x00007ffff7adb2e2 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:669
#15 0x00007ffff7afb960 in run_mod (arena=0x6b78c0, flags=0x7fffffffd390, locals=0x7ffff7f6d168, globals=0x7ffff7f6d168, filename=<optimized out>, mod=0x6cbac8)
at Python/pythonrun.c:1376
#16 PyRun_FileExFlags (fp=0x66c310, filename=<optimized out>, start=<optimized out>, globals=0x7ffff7f6d168, locals=0x7ffff7f6d168, closeit=1, flags=0x7fffffffd390)
at Python/pythonrun.c:1362
#17 0x00007ffff7afbb3f in PyRun_SimpleFileExFlags (fp=0x66c310, filename=0x7fffffffd95b "/home/mbachett/pulsar_software/presto/python/ffdot_example.py",
closeit=1, flags=0x7fffffffd390) at Python/pythonrun.c:948
#18 0x00007ffff7b11484 in Py_Main (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:645
#19 0x00007ffff6d07830 in __libc_start_main (main=0x400710 <main>, argc=2, argv=0x7fffffffd4b8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffffffd4a8) at ../csu/libc-start.c:291
#20 0x0000000000400649 in _start ()
Looking at
#6 0x00007fffecda3a09 in _wrap_corr_rz_plane (self=<optimized out>, args=<optimized out>) at presto_src/presto_wrap.c:18528
it seems that it originates from some of the automatic code that SWIG is throwing out, so it would probably be interesting to see if the problem is reproduced in the new SWIG branch. @scottransom
Is this issue still relevant? I am experiencing similar problems.
Yes. And I don't understand it at all. I can reproduce it with Anaconda, but cannot reproduce it with either Python2 or Python3 in a virtual environment, which is what I've been using recently.
Note that there is some evidence that it is related to the import_array(); call that is required by the Numpy C-API. This is on my list of things to try to figure out soon if I can find some time.