Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segmentation fault in PyArray_Item_INCREF #7595

Closed
goldonly opened this issue May 2, 2016 · 8 comments
Closed

Segmentation fault in PyArray_Item_INCREF #7595

goldonly opened this issue May 2, 2016 · 8 comments

Comments

@goldonly
Copy link

goldonly commented May 2, 2016

I embed Python into cpp, and need to use numpy in the embeded python-shell. I get "Segmentation fault" while importing numpy in the second session with python-shell, and the first session with python-shell is ended by Ctrl-D. The following cpp code recall the "Segmentation fault" error.
Using Ubuntu 14.04.4 LTS(64 bit), Python3.4.3, gcc4.8.4, numpy1.11.0

//c_py.cpp
#include <stdio.h>
#include "Python.h"

void callpy(int argc, char**argv);

int main(int argc, char**argv)
{
    while(true)
    {
        callpy(argc,argv);
        printf("\nFinish one call. Do something else. Wait.\n");
        getchar();
    }
    return 0;
}

void callpy(int argc, char**argv)
{
    Py_Initialize();
    Py_Main(argc,(wchar_t**)argv);
    Py_Finalize();
}

I gdb it and got the following:

$ gdb ./c_py 

GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
This GDB was configured as "x86_64-linux-gnu".

(gdb) run
Starting program: ./c_py 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Python 3.4.3 (default, Oct 14 2015, 20:31:36) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> print(np.version.version)
1.11.0
>>> Ctr-D

Finish one call. Do something else. Wait.

Python 3.4.3 (default, Oct 14 2015, 20:31:36) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff55b5db8 in PyArray_Item_INCREF (
    data=data@entry=0x7ffff4b3f740 "\n", 
    descr=descr@entry=0x7ffff5839060 <OBJECT_Descr>)
    at numpy/core/src/multiarray/refcount.c:35
35          Py_XINCREF(temp);
(gdb) list
30      if (!PyDataType_REFCHK(descr)) {
31          return;
32      }
33      if (descr->type_num == NPY_OBJECT) {
34          NPY_COPY_PYOBJECT_PTR(&temp, data);
35          Py_XINCREF(temp);
36      }
37      else if (PyDataType_HASFIELDS(descr)) {
38          PyObject *key, *value, *title = NULL;
39          PyArray_Descr *new;
(gdb) bt
#0  0x00007ffff55b5db8 in PyArray_Item_INCREF (
    data=data@entry=0x7ffff4b3f740 "\n", 
    descr=descr@entry=0x7ffff5839060 <OBJECT_Descr>)
    at numpy/core/src/multiarray/refcount.c:35
#1  0x00007ffff55b8eeb in PyArray_FromScalar (scalar=<optimized out>, 
    outcode=outcode@entry=0x0) at numpy/core/src/multiarray/scalarapi.c:344
#2  0x00007ffff55ba2ac in gentype_nonzero_number (m1=<optimized out>)
    at numpy/core/src/multiarray/scalartypes.c.src:371
#3  0x00007ffff79e5507 in PyObject_IsTrue ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#4  0x00007ffff7894162 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#5  0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#6  0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#7  0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#8  0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#9  0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#10 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#11 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#12 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#13 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#14 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#15 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#16 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#17 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#18 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#19 0x00007ffff7984aec in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#20 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#21 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#22 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#23 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#24 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#25 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#26 0x00007ffff79f135d in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#27 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#28 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#29 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#30 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#31 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#32 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#33 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#34 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#35 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#36 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#37 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#38 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#39 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#40 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#41 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#42 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#43 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#44 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#45 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#46 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#47 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#48 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#49 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#50 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#51 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#52 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#53 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#54 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#55 0x00007ffff79f135d in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#56 0x00007ffff7896feb in PyEval_EvalFrameEx ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#57 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#58 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#59 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#60 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#61 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#62 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#63 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#64 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#65 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#66 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#67 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#68 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#69 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#70 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#71 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#72 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#73 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#74 0x00007ffff79f135d in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#75 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#76 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#77 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#78 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#79 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#80 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#81 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#82 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#83 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#84 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#85 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#86 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#87 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#88 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#89 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#90 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#91 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#92 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#93 0x00007ffff79f135d in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#94 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#95 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#96 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#97 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#98 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#99 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#100 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#101 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#102 0x00007ffff79c87f6 in ?? ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#103 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#104 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#105 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#106 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#107 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#108 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#109 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#110 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#111 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#112 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#113 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#114 0x00007ffff7984aec in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#115 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#116 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#117 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#118 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#119 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#120 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#121 0x00007ffff79f135d in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#122 0x00007ffff7896feb in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#123 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#124 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#125 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#126 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#127 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#128 0x00007ffff78976fc in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#129 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#130 0x00007ffff79c87f6 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#131 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#132 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#133 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#134 0x00007ffff78dd82f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#135 0x00007ffff78e2938 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#136 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type <return> to continue, or q <return> to quit---
#137 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#138 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#139 0x00007ffff79c895b in PyEval_EvalCode ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#140 0x00007ffff79f0123 in PyRun_InteractiveOneObject ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#141 0x00007ffff79f046e in PyRun_InteractiveLoopFlags ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#142 0x00007ffff79f0c7e in PyRun_AnyFileExFlags ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#143 0x00007ffff79f24ae in Py_Main ()
   from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#144 0x0000000000400983 in callpy (argc=1, argv=0x7fffffffdf28)
    at ./c_py.cpp:20
#145 0x000000000040094d in main (argc=1, argv=0x7fffffffdf28)
    at ./c_py.cpp:10

Is there something wrong with NPY_COPY_PYOBJECT_PTR?
NPY_COPY_PYOBJECT_PTR copy PyObject pointer from src to dst, so src and dst need to be pointer to PyObject pointer.
NPY_COPY_PYOBJECT_PTR is defined in npy_cpu.h
#define NPY_COPY_PYOBJECT_PTR(dst, src) memcpy(dst, src, sizeof(PyObject *))
but in
34 NPY_COPY_PYOBJECT_PTR(&temp, data);
data is char*. Perhaps data would be &data.
But I get some other Segmentation faults after modifying to NPY_COPY_PYOBJECT_PTR(&temp, &data);
well, deep segfault, deep night.

@njsmith
Copy link
Member

njsmith commented May 2, 2016

The problem is that you're repeatedly
initializing/uninitializing/reinitializing/... the Python interpreter.
Numpy doesn't support this; it's trying to use resources from the first
interpreter with the second interpreter. You need to just initialize one
interpreter and then stick with it...

I embed Python into cpp, and need to use numpy in the embeded python-shell.
I get "Segmentation fault" while importing numpy in the second session with
python-shell, and the first session with python-shell is ended by Ctrl-D.
The following cpp code recall the "Segmentation fault" error.
Using Ubuntu 14.04.4 LTS(64 bit), Python3.4.3, gcc4.8.4, numpy1.11.0

//c_py.cpp
#include <stdio.h>
#include "Python.h"

void callpy(int argc, char**argv);

int main(int argc, char**argv)
{
while(true)
{
callpy(argc,argv);
printf("\nFinish one call. Do something else. Wait.\n");
getchar();
}
return 0;
}

void callpy(int argc, charargv)
{
Py_Initialize();
Py_Main(argc,(wchar_t
)argv);
Py_Finalize();
}

I gdb it and got the following:

$ gdb ./c_py

GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
This GDB was configured as "x86_64-linux-gnu".

(gdb) run
Starting program: ./c_py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Python 3.4.3 (default, Oct 14 2015, 20:31:36)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.

import numpy as np
print(np.version.version)
1.11.0
Ctr-D

Finish one call. Do something else. Wait.

Python 3.4.3 (default, Oct 14 2015, 20:31:36)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.

import numpy as np

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff55b5db8 in PyArray_Item_INCREF (
data=data@entry=0x7ffff4b3f740 "\n",
descr=descr@entry=0x7ffff5839060 <OBJECT_Descr>)
at numpy/core/src/multiarray/refcount.c:35
35 Py_XINCREF(temp);
(gdb) list
30 if (!PyDataType_REFCHK(descr)) {
31 return;
32 }
33 if (descr->type_num == NPY_OBJECT) {
34 NPY_COPY_PYOBJECT_PTR(&temp, data);
35 Py_XINCREF(temp);
36 }
37 else if (PyDataType_HASFIELDS(descr)) {
38 PyObject *key, *value, *title = NULL;
39 PyArray_Descr *new;
(gdb) bt
#0 0x00007ffff55b5db8 in PyArray_Item_INCREF (
data=data@entry=0x7ffff4b3f740 "\n",
descr=descr@entry=0x7ffff5839060 <OBJECT_Descr>)
at numpy/core/src/multiarray/refcount.c:35
#1 0x00007ffff55b8eeb in PyArray_FromScalar (scalar=,
outcode=outcode@entry=0x0) at numpy/core/src/multiarray/scalarapi.c:344
#2 0x00007ffff55ba2ac in gentype_nonzero_number (m1=)
at numpy/core/src/multiarray/scalartypes.c.src:371
#3 0x00007ffff79e5507 in PyObject_IsTrue ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#4 0x00007ffff7894162 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#5 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#6 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#7 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#8 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#9 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#10 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#11 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#12 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#13 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#14 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#15 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#16 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#17 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#18 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#19 0x00007ffff7984aec in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#20 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#21 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#22 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#23 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#24 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#25 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#26 0x00007ffff79f135d in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#27 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#28 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#29 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#30 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#31 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#32 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#33 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#34 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#35 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#36 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#37 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#38 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#39 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#40 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#41 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#42 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#43 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#44 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#45 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#46 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#47 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#48 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#49 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#50 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#51 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#52 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#53 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#54 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#55 0x00007ffff79f135d in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#56 0x00007ffff7896feb in PyEval_EvalFrameEx ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#57 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#58 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#59 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#60 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#61 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#62 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#63 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#64 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#65 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#66 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#67 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#68 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#69 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#70 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#71 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#72 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#73 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#74 0x00007ffff79f135d in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#75 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#76 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#77 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#78 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#79 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#80 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#81 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#82 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#83 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#84 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#85 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#86 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#87 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#88 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#89 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#90 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#91 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#92 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#93 0x00007ffff79f135d in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#94 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#95 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#96 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#97 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#98 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#99 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#100 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#101 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#102 0x00007ffff79c87f6 in ?? ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#103 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#104 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#105 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#106 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#107 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#108 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#109 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#110 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#111 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#112 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#113 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#114 0x00007ffff7984aec in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#115 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#116 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#117 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#118 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#119 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#120 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#121 0x00007ffff79f135d in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#122 0x00007ffff7896feb in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#123 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#124 0x00007ffff78971e2 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#125 0x00007ffff78976fc in PyEval_EvalFrameEx ()
---Type to continue, or q to quit---
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#126 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#127 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#128 0x00007ffff78976fc in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#129 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#130 0x00007ffff79c87f6 in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#131 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#132 0x00007ffff796f161 in _PyObject_CallMethodIdObjArgs ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#133 0x00007ffff7984c33 in PyImport_ImportModuleLevelObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#134 0x00007ffff78dd82f in ?? ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#135 0x00007ffff78e2938 in PyObject_Call ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#136 0x00007ffff7986ba7 in PyEval_CallObjectWithKeywords ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
---Type to continue, or q to quit---
#137 0x00007ffff7894a41 in PyEval_EvalFrameEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#138 0x00007ffff79c81c6 in PyEval_EvalCodeEx ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#139 0x00007ffff79c895b in PyEval_EvalCode ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#140 0x00007ffff79f0123 in PyRun_InteractiveOneObject ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#141 0x00007ffff79f046e in PyRun_InteractiveLoopFlags ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#142 0x00007ffff79f0c7e in PyRun_AnyFileExFlags ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#143 0x00007ffff79f24ae in Py_Main ()
from /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0
#144 0x0000000000400983 in callpy (argc=1, argv=0x7fffffffdf28)
at ./c_py.cpp:20
#145 0x000000000040094d in main (argc=1, argv=0x7fffffffdf28)
at ./c_py.cpp:10

Is there something wrong with NPY_COPY_PYOBJECT_PTR?
NPY_COPY_PYOBJECT_PTR copy PyObject pointer from src to dst, so src and dst
need to be pointer to PyObject pointer.
NPY_COPY_PYOBJECT_PTR is defined in npy_cpu.h
#define NPY_COPY_PYOBJECT_PTR(dst, src) memcpy(dst, src, sizeof(PyObject ))
but in
34 NPY_COPY_PYOBJECT_PTR(&temp, data);
data is char
. Perhaps data would be &data.
But I get some other Segmentation faults after modifying to
NPY_COPY_PYOBJECT_PTR(&temp,
&data);
well, deep segfault, deep night.


You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
#7595

@goldonly
Copy link
Author

goldonly commented May 2, 2016

@njsmith thanks. so I need to find some ways to switch between Python thread and main thread.

@njsmith
Copy link
Member

njsmith commented May 2, 2016

Perhaps? I don't think we have enough information about your problem to really advise, and I guess there are better places for general questions about Python embedding, so closing this. Good luck though.

@njsmith njsmith closed this as completed May 2, 2016
@scopatz
Copy link

scopatz commented Jan 5, 2017

For what it is worth, I am seeing this too.

@njsmith
Copy link
Member

njsmith commented Jan 5, 2017

@scopatz: Are you also using re-initializing CPython and/or using multiple subinterpreters?

@scopatz
Copy link

scopatz commented Jan 5, 2017

Yeah, I am reinitializing many times. It has only come up in a test suite so far. It isn't hard for me to work around, but a failure mode other than a segfault would have been nice :)

@njsmith
Copy link
Member

njsmith commented Jan 5, 2017

The problem is that there are a bunch of places inside numpy where it caches Python objects in global variables. To be correct w/r/t reinitialization/subinterpreters, you can never do that, because you might end up using an object that was part of one interpreter with the second interpreter. To fix it we would need to go through and find all these places, and make it so that we're careful to pass around the module object and stash all of them as variables on it. Quite a bit of tricky work, it would likely make numpy slower in general, and most people don't care, so...

@scopatz
Copy link

scopatz commented Jan 5, 2017

Yeah, don't get me wrong @njsmith. I am not suggesting that this is worth fixing for all of the reason that you mention and more. One python interpreter per process is more stable anyway. I was just offering my experience as a data point. The error message that arises is not indicative of the underlying problem. I do think that is should remain an error, and if there is an easy way to make that apparent that would be great.

Even a better error message might not be worth the effort given the small number of people who will ever hit this problem. Presumably, they can find this issue too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants