ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> cpp-sig
cpp-sig
Re: [C++-sig] problem with python::dict[]
by David Abrahams other posts by this author
Feb 26 2003 7:53PM messages near this date
[C++-sig] problem with python::dict[] | [C++-sig] Boost.Python compiles & links on Darwin
harold fellermann <harold@[...].de>  writes:

>  Hello,
> 
>  I got your address from
>  http://mail.python.org/pipermail/c++-sig/2002-June/001311.html -- so I
>  don't know whether you are the right person to ask.

"We" are the right people to ask.  You sent it to the appropriate
place: c++-sig@[...].org.

>  I think I have found an error in the boost.python's dict-interface.
> 
>  My following code-snippet runs into segmantation fault:
> 
>  #include <stdlib.h>
>  #include <boost/python/dict.hpp>
> 
>  using namespace boost::python;
> 
>  int main()
>  {
>     dict x[750];
> 
>     return 0;
>  }


Do you really mean to construct an array of 750 dicts?  I think if
you're going to do that from a program (as opposed to an extension
module) you'll need to call some things like PyInitialize() first.
See libs/python/test/embedding.cpp for an example.

>  The problem seems to concern the garbage collector from the
>  Python/C-API, as
>  my debugger tells me, the program crashes in _PyObject_GC_New():
> 
> 
>  (gdb) run
>  Starting program: /home/tsb/harold/c_network/pytest
>  [New Thread 1024 (LWP 25905)]
> 
>  Program received signal SIGSEGV, Segmentation fault.
>  [Switching to Thread 1024 (LWP 25905)]
>  0x0809a909 in PyErr_Occurred ()
>  (gdb) bt
>  #0  0x0809a909 in PyErr_Occurred ()
>  #1  0x080addca in _PyObject_GC_New ()
>  #2  0x08064edc in PyDict_New ()
>  #3  0x4003b1f4 in boost::python::detail::dict_base::dict_base() ()
>      from /usr/local/lib/libboost_python.so.1.29.0
>  #4  0x080c6c6c in main () at pytest.c:9
>  #5  0x401744a2 in __libc_start_main () from /lib/libc.so.6
> 
> 
>  I tried this with a couple of python-objects and all containers (dict,
>  list, ...)
>  crashed in exactly the same way. Interestingly the program behaves
>  normal when
>  I reduce the number of objects within my array to approx. 700.

Very interesting, but inconclusive.

>  My configuration looks as follows:
>  - python 2.2.1 (#1, Sep 10 2002, 17:49:17)
>  - gcc 3.2
>  - boost version 1.29.0
> 
>  Do you have any idea what is going on here? Is this a known bug,
>  maybe even a nowadays fixed one? Or is it only a question of
>  configuration?  Any help will be appreciated!

It's hard to imagine any bug in Boost.PYthon that would depend on the
size of the array being small; maybe one in the compiler or in Python
could do that.

This works on my system:

#include <stdlib.h> 
#include <boost/python/dict.hpp> 

using namespace boost::python;

void test()
{
    // Initialize the interpreter
    Py_Initialize();
    dict d[750];
}

int main()
{
    if (handle_exception(test))
    {
        if (PyErr_Occurred())
            PyErr_Print();
        return 1;
    }
    return 0;
}

HTH,
-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com


_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
harold fellermann
David Abrahams

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved