classification
Title: Embedded python crashed on 4th run, if "ctypes" is used
Type: crash Stage:
Components: ctypes Versions: Python 2.6, Python 2.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: theller Nosy List: mkp, ocean-city, robince, theller, warlock (5)
Priority: Keywords patch

Created on 2009-09-09 08:31 by warlock, last changed 2009-11-13 14:24 by robince.

Files
File name Uploaded Description Edit Remove
fix_ctypes_crash.patch ocean-city, 2009-09-20 02:19
Messages (4)
msg92444 - (view) Author: Ilya (warlock) Date: 2009-09-09 08:31
When embedding python from C, and importing "ctypes" module in embedded 
script, it always crashes on Py_Finalize() on 4th cycle.
Tested with both PyRun_SimpleString(...) and PyRun_String(...).
Platform: Windows XP
IDE's: LabWindows/CVI 8.5 and Code::Blocks/gcc

Code:
--------------------------
#include <stdio.h>
#include <python.h>

int main()
{
    int i;
    for (i=0; i<10; i++)
    {
        printf("--- %d ---\n", i);
        Py_Initialize();
        PyRun_SimpleString("import ctypes");
        Py_Finalize();
    }
    return 0;
}
--------------------------------
Output:
--------------------------------
--- 0 ---
--- 1 ---
--- 2 ---
--- 3 ---

Process returned -1073741819 (0xC0000005)   execution time : 3.109 s
Press any key to continue.
--------------------------------
msg92449 - (view) Author: Ilya (warlock) Date: 2009-09-09 12:49
Tested
   obj=PyImport_ImportModule("ctypes");
   Py_DECREF(obj);
instead of PyRun_SimpleString(...) - same result
msg92555 - (view) Author: (mkp) Date: 2009-09-12 22:12
on python2.5 / mac os x 10.5.7:

$ cat main.c
#include <stdio.h>
#include <python.h>

int main()
{
    int i;
    for (i=0; i<10; i++)
    {
        printf("--- %d ---\n", i);
        Py_Initialize();
        PyRun_SimpleString("import ctypes");
        Py_Finalize();
    }
    return 0;
}

$ gcc -I/usr/include/python2.5/ -L/usr/lib/python2.5/ -lpython main.c
$ ./a.out 
--- 0 ---
--- 1 ---
--- 2 ---
--- 3 ---
Assertion failed: (type->tp_flags & Py_TPFLAGS_HEAPTYPE), function 
type_dealloc, file Objects/typeobject.c, line 2148.
Abort trap
$ uname -mprsv
Darwin 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; 
root:xnu-1228.12.14~1/RELEASE_I386 i386 i386
msg92880 - (view) Author: Hirokazu Yamamoto (ocean-city) Date: 2009-09-20 02:19
I hope attached patch will fix this issue.
History
Date User Action Args
2009-11-13 14:24:19robincesetnosy: + robince
2009-09-20 02:19:51ocean-citysetfiles: + fix_ctypes_crash.patch

nosy: + ocean-city
messages: + msg92880

keywords: + patch
2009-09-12 22:12:00mkpsetnosy: + mkp
messages: + msg92555
2009-09-09 12:49:57warlocksetmessages: + msg92449
2009-09-09 08:31:14warlockcreate