Hello, I've encountered a strange bug that appears to be either in gcc's gomp implementation or in how python loads extension modules linked against gomp. Here's the error:
Using gcc (multiple versions) on linux, I compile an empty c extension module and pass -lgomp as a linker arg. If I import it, running a simple script in matplotlib causes a segfault. Not passing -lgomp or not loading the empty module makes the code works fine. More specifically, if I compile: #include "Python.h" static struct PyMethodDef methods[] = { {0, 0, 0, 0} }; PyMODINIT_FUNC initempty(void) { Py_InitModule4("empty", methods, 0, 0, PYTHON_API_VERSION); } using ``ext_modules = [Extension("empty", ["empty.c"], extra_link_args = ["-lgomp"])]``, then import empty import matplotlib.pylab as plt plt.figure() plt.plot([0,1], [0,1], '-b') plt.show() causes the program to segfault (removing ``import empty`` makes it fine). Looking at a traceback: #0 0x00f78bc7 in __cxa_allocate_exception () from /usr/lib/libstdc++.so.6 #1 0x008f51f2 in py_to_agg_transformation_matrix (obj=0x8223f58, errors=false) at src/agg_py_transforms.cpp:20 #2 0x008fdd73 in _path_module::update_path_extents (this=0x8e45f90, args=...) at src/path.cpp:378 #3 0x009048bd in Py::ExtensionModule<_path_module>::invoke_method_varargs (this=<value optimized out>, method_def=0x8e9ae30, args=...) at ./CXX/Python2/ExtensionModule.hxx:184 #4 0x008f0d96 in method_varargs_call_handler (_self_and_name_tuple=0x8e6eeac, _args=0x94e683c) at CXX/Python2/cxx_extensions.cxx:1714 #5 0x080dc0d0 in PyEval_EvalFrameEx () #6 0x080dddf2 in PyEval_EvalCodeEx () While occurring in some of matplotlib's extension code (and I haven't found another library that crashes it), the fact that the deciding factor is whether I link against gomp indicates the it's probably upstream somewhere. I encountered this error a year ago and asked about it on the matplotlib mailing list, but found a quick workaround then, and with deadline pressure I forgot about it. However, it's come up again, and then I was asked to bump it to python-dev, which is why I'm posting it here. I can reproduce it on the following systems. In all cases, matplotlib is compiled from source on the development branch (r8969) and uses QT4Agg as the backend, as is numpy, scipy, etc. If needed, I can track down more versions. gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.4, 64bit, Python 2.6.6, ubuntu 10.10 gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64bit, Python 2.6.5, ubuntu 10.04 gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1, 32bit, Python 2.6.4, ubuntu 9.10 gcc 4.5.2 (source build), Python 2.6.5, ubuntu 10.04. On this build, the given source example does not produce the result, and I haven't been able to tweak it so it does. However, linking to a much larger extension library that uses many different parts of openmp causes exactly the same crash. If I recompile that library without openmp support, then everything works fine; with openmp support it corrupts something and matplotlib crashes in exactly the same way. gcc 4.3.2, Python 2.6.2, ubuntu 9.04 (I don't have access to this system any more, since it got upgraded, but it had the same problem a year ago). I'd be happy to provide any more information if needed. I attached example code that reproduces it. Let me know if I should file a bug report (and where to file it -- which is why I haven't yet). Thanks, --Hoyt ++++++++++++++++++++++++++++++++++++++++++++++++ + Hoyt Koepke + University of Washington Department of Statistics + http://www.stat.washington.edu/~hoytak/ + hoy...@gmail.com ++++++++++++++++++++++++++++++++++++++++++
python-gomp-bug.tar.gz
Description: GNU Zip compressed data