Go Back   ZeroC Forums > Bug Reports

Reply
 
LinkBack Thread Tools Rate Thread Display Modes
  #1 (permalink)  
Old 05-14-2007
Kristaps Rāts Kristaps Rāts is offline
Registered User
 
Name: Kristaps Rāts
Organization: Community Ltd.
Project: evaluating for now
 
Join Date: May 2007
Posts: 2
Segfault (using Python bindings)

When using MySQLdb(Python mysql bindings) with Ice segfaults or python errors occur upon terminating a program with SIGINT.

Most of the time the program segfaults, sometimes it displays one of the following error messages:

Fatal Python error: ceval: tstate mix-up

and

Fatal Python error: GC object already tracked
Traceback (most recent call last):
Aborted

The OS is Ubuntu 6.06 (Dapper Drake) running on a dual processor machine.
Ice and IcePy version is 3.2.0, compiled with gcc 4.0.3
Python version is 2.4.3, MySQLdb version is 1.2.1rc3
(all packages except Ice are stock distro packages)

Testcase:

whatever.ice :
Code:
module Whatever
{
        interface Widget
        {
                void doSomething ();
        };
};
config.server :
Code:
Whatever.Endpoints = tcp -p 10000
testcase.py :
Code:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import sys, Ice, MySQLdb

Ice.loadSlice ("whatever.ice")
import Whatever

class WidgetI (Whatever.Widget):

        def __init__ (self):
                self.db = MySQLdb.connect (user="", passwd="") # your db config here
                self.cursor = self.db.cursor() # doesn't segfault when this line is removed

        def doSomething (self, current=None):
                return

        def shutdown (self, current=None):
                # never reached
                self.cursor.close()
                self.db.close()
                current.adapter.getCommunicator().shutdown()

class Server (Ice.Application):
        def run (self, args):
                adapter = self.communicator().createObjectAdapter("Whatever")
                adapter.add (WidgetI(), self.communicator().stringToIdentity("Widget"))
                adapter.activate()
                self.communicator().waitForShutdown()
                return 0

app = Server();
sys.exit (app.main (sys.argv, "config.server"))
The segfault occurs upon terminating via Ctrl-C or kill -INT pid

Stacktrace upon receiving SIGSEGV:

Code:
#0  0x080c963b in PyErr_Fetch ()
#1  0x0809583c in PyType_Ready ()
#2  0x08089d4b in _PyType_Lookup ()
#3  0x0807a335 in PyDict_Next ()
#4  0x08089f7b in _PyType_Lookup ()
#5  0xb7bfe410 in ~ServantWrapper (this=0x81f9d28) at ObjectAdapter.cpp:126
#6  0xb7a4e0b4 in IceInternal::GCShared::__decRef (this=0x81f9d4c) at GC.cpp:91
#7  0xb7aba0b2 in IceInternal::decRef (p=0x81f9d4c) at Object.cpp:21
#8  0xb7c01f08 in ~Handle (this=0x81f9cfc) at Handle.h:91
#9  0xb7c03643 in ~pair (this=0x81f9cf8) at stl_pair.h:69
#10 0xb7c0369f in __gnu_cxx::new_allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > >::destroy (this=0xb72ce37f, __p=0x81f9cf8) at new_allocator.h:107
#11 0xb7c0373b in std::_Rb_tree<std::string, std::pair<std::string const, IceInternal::Handle<Ice::Object> >, std::_Select1st<std::pair<std::string const, IceInternal::Handle<Ice::Object> > >, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > >::destroy_node (this=0x81f0e70, __p=0x81f9ce8) at stl_tree.h:389
#12 0xb7c037ce in std::_Rb_tree<std::string, std::pair<std::string const, IceInternal::Handle<Ice::Object> >, std::_Select1st<std::pair<std::string const, IceInternal::Handle<Ice::Object> > >, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > >::_M_erase (this=0x81f0e70, __x=0x81f9ce8) at stl_tree.h:1097
#13 0xb7c0380d in ~_Rb_tree (this=0x81f0e70) at stl_tree.h:571
#14 0xb7c038b1 in ~map (this=0x81f0e70) at stl_map.h:92
#15 0xb7b00be3 in ~pair (this=0x81f0e68) at stl_pair.h:69
#16 0xb7b00c3f in __gnu_cxx::new_allocator<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > >::destroy (this=0xb72ce46f, __p=0x81f0e68) at new_allocator.h:107
#17 0xb7b00e65 in std::_Rb_tree<Ice::Identity, std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > >, std::_Select1st<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > >, std::less<Ice::Identity>, std::allocator<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > > >::destroy_node (
    this=0xb72ce604, __p=0x81f0e58) at stl_tree.h:389
#18 0xb7b00ef8 in std::_Rb_tree<Ice::Identity, std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > >, std::_Select1st<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > >, std::less<Ice::Identity>, std::allocator<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > > >::_M_erase (
    this=0xb72ce604, __x=0x81f0e58) at stl_tree.h:1097
#19 0xb7b00fc7 in std::_Rb_tree<Ice::Identity, std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > >, std::_Select1st<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > >, std::less<Ice::Identity>, std::allocator<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > > >::clear (this=0xb72ce604)
    at stl_tree.h:667
#20 0xb7b0103b in std::map<Ice::Identity, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > >, std::less<Ice::Identity>, std::allocator<std::pair<Ice::Identity const, std::map<std::string, IceInternal::Handle<Ice::Object>, std::less<std::string>, std::allocator<std::pair<std::string const, IceInternal::Handle<Ice::Object> > > > > > >::clear (this=0xb72ce604) at stl_map.h:465
#21 0xb7afe19c in IceInternal::ServantManager::destroy (this=0x81ccdb0) at ServantManager.cpp:374
#22 0xb7aa8e86 in Ice::ObjectAdapterI::destroy (this=0x81ccce8) at ObjectAdapterI.cpp:329
#23 0xb7aa167f in IceUtilInternal::SecondVoidMemFun<std::string const, Ice::ObjectAdapterI, IceUtil::Handle<Ice::ObjectAdapterI> >::operator() (this=0xb72ce6fc, pair=@0xb72ce6d8)
    at Functional.h:125
#24 0xb7aa16c7 in std::for_each<std::_Rb_tree_iterator<std::pair<std::string const, IceUtil::Handle<Ice::ObjectAdapterI> > >, IceUtilInternal::SecondVoidMemFun<std::string const, Ice::ObjectAdapterI, IceUtil::Handle<Ice::ObjectAdapterI> > > (__first={_M_node = 0x81fb4b0}, __last={_M_node = 0xb72ce73c}, __f=
        {<std::unary_function<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, IceUtil::Handle<Ice::ObjectAdapterI> >,void>> = {<No data fields>}, _mfn = {__pfn = 0x39, __delta = 0}}) at stl_algo.h:158
#25 0xb7aa07fc in IceInternal::ObjectAdapterFactory::destroy (this=0x81d77a0) at ObjectAdapterFactory.cpp:127
#26 0xb7a6591f in IceInternal::Instance::destroy (this=0x81dbf08) at Instance.cpp:847
#27 0xb7a13e34 in Ice::CommunicatorI::destroy (this=0x81ab3e0) at CommunicatorI.cpp:74
#28 0xb7becbeb in communicatorDestroy (self=0xb74cea60) at Communicator.cpp:286
#29 0x080b606f in PyEval_EvalFrame ()
#30 0x080b713b in PyEval_EvalFrame ()
#31 0x080b713b in PyEval_EvalFrame ()
#32 0x080b713b in PyEval_EvalFrame ()
#33 0x080b781f in PyEval_EvalCodeEx ()
#34 0x080fc13d in PyFunction_SetClosure ()
#35 0x0805946c in PyObject_Call ()
#36 0x0805f005 in PyMethod_New ()
#37 0x0805946c in PyObject_Call ()
#38 0x080b0583 in PyEval_CallObjectWithKeywords ()
#39 0x080e074d in _PyObject_GC_NewVar ()
#40 0xb7f6a341 in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#41 0xb7ed74ee in clone () from /lib/tls/i686/cmov/libc.so.6
Reply With Quote
  #2 (permalink)  
Old 05-14-2007
matthew's Avatar
matthew matthew is offline
ZeroC Staff
 
Name: Matthew Newhook
Organization: ZeroC, Inc.
Project: Internet Communications Engine
 
Join Date: Feb 2003
Location: NL, Canada
Posts: 1,055
Thanks for the bug report. We've duplicated the error and are looking into it.
Reply With Quote
  #3 (permalink)  
Old 05-15-2007
mes's Avatar
mes mes is offline
ZeroC Staff
 
Name: Mark Spruiell
Organization: ZeroC, Inc.
Project: Ice Developer
 
Join Date: Feb 2003
Location: California
Posts: 971
Hi,

The crash is caused by a bug in the Ice extension. We will include a fix in the next release. If you want to fix this yourself, change to the IcePy source tree and open modules/ObjectAdapter.cpp. Around line 124, change the ServantWrapper destructor to the following:
Code:
IcePy::ServantWrapper::~ServantWrapper()                  
{               
    AdoptThread adoptThread; // ADD THIS LINE
    Py_DECREF(_servant);
}
Thanks for reporting this.

Take care,
- Mark
Reply With Quote
  #4 (permalink)  
Old 05-16-2007
Kristaps Rāts Kristaps Rāts is offline
Registered User
 
Name: Kristaps Rāts
Organization: Community Ltd.
Project: evaluating for now
 
Join Date: May 2007
Posts: 2
Yes, it works now, thank you.
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
Python BiT Help Center 1 09-19-2006 06:21 PM
Blobject in Python mario Help Center 1 07-11-2005 01:06 PM
General praise, CLR and C# bindings Ctaesis Comments 2 01-05-2004 01:26 PM
SegFault problems with Proxies galbe Help Center 5 11-03-2003 09:55 AM
Python bindings for Ice - pyce 0.1 vukicevic Comments 1 07-03-2003 09:37 AM


All times are GMT -4. The time now is 08:15 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.0.0
(c) 2008 ZeroC, Inc.