segfault on ltrace (dispatcher)



Hello:

	I'm using a thread and a dispatcher to call a function that loads some
shared objets at the same time that the main window is build (showed).

	This code works fine normally but if produces a segmentation fault if I
ltrace the binary ... why ??

	Is this the good way to use the thread and dispatcher? i've read the
examples in gtkmm documentation and I think the code is ok.

Now the code and the last part of the ltrace:


------------------------ The Code
... This is the end of Gtk::Window constructor

    dispatcher.connect(
            sigc::mem_fun(*this, &MainWindow::init) );

    Glib::Thread* thread = Glib::Thread::create(
            sigc::mem_fun(*this, &MainWindow::call_dispatcher), false);

    // Muestra todos los widgets
    show_all_children();
}

MainWindow::~MainWindow()
{
}

void MainWindow::call_dispatcher()
{
        dispatcher();
}

void MainWindow::init()
{
      // Espera a q terminen todos los eventos de gtk
      while( Gtk::Main::events_pending() )
              Gtk::Main::iteration();

      // Busca y carga los plugins
      mainStatusBar->push("Cargando plugins"); // ??

      guiPluginManager->scan_plugins();

      for(int i = 0; i < guiPluginManager->size(); i++){
               PluginNode* pluginNode =
guiPluginManager->get_plugin_node(i);
               actionList->add_plugin(pluginNode, i);
        }
}
-----------------

----------------- Last part of ltrace
<... Gnome::UI::App::set_statusbar(Gtk::Widget&) resumed> ) = 1
Glib::ustring::ustring(char const*)(0xbffff590, 0x80b2978, 0x8161908,
0xbffff5a0, 0xb760703c) = 0xbffff590
Glib::ustring::~ustring()(0xbffff590, 0x80b2978, 0x8161908, 0xbffff5a0,
0xb760703c) = 0
operator new(unsigned int)(40, 0x80b2978, 0x8161908, 0xbffff5a0,
0xb760703c) = 0x81a7628
sigc::trackable::trackable()(0x81a7628, 0x80b2978, 0x8161908,
0xbffff5a0, 0x160703c) = 0x81a7628
sigc::trackable::add_destroy_notify_callback(void*, void* (*)(void*))
const(0xbffff664, 0x81a7628, 0x80771dc, 0x4148b6be, 40) = 0xbffff390
sigc::slot_base::slot_base(sigc::internal::slot_rep*)(0xbffff450,
0x81a7628, 0x8161908, 0xbffff5a0, 0x60703c) = 0x81a7628
Glib::Dispatcher::connect(sigc::slot<void, sigc::nil, sigc::nil,
sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>
const&)(0xbffff460, 0xbffff644, 0xbffff450, 0xbffff5a0, 0x60703c
<unfinished ...>
operator new(unsigned int)(40, 5, 0xbffff2f0, 0xb74f9ab1, 0x41162547) =
0x81a7810
sigc::trackable::trackable()(0x81a7810, 5, 0xbffff2f0, 0xb74f9ab1,
0x41162547) = 0x81a7810
sigc::trackable::add_destroy_notify_callback(void*, void* (*)(void*))
const(0xbffff664, 0x81a7810, 0x80771dc, 0x4148b6be, 40) = 0xbffff230
<... Glib::Dispatcher::connect(sigc::slot<void, sigc::nil, sigc::nil,
sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> const&)
resumed> ) = 0xbffff460
sigc::connection::~connection()(0xbffff460, 0xbffff644, 0xbffff450,
0xbffff5a0, 0x60703c) = 0xbffff360
sigc::slot_base::~slot_base()(0xbffff450, 0xbffff644, 0xbffff450,
0xbffff5a0, 0x60703c <unfinished ...>
sigc::trackable::remove_destroy_notify_callback(void*) const(0xbffff664,
0x81a7628, 0xbffff3c8, 0xb755c07e, 0x81a7840) = 0xbffff330
<... sigc::slot_base::~slot_base() resumed> )    = 0x41132af8
operator new(unsigned int)(40, 0xbffff644, 0xbffff450, 0xbffff5a0,
0x60703c) = 0x81a7628
sigc::trackable::trackable()(0x81a7628, 0xbffff644, 0xbffff450,
0xbffff5a0, 94268) = 0x81a7628
sigc::trackable::add_destroy_notify_callback(void*, void* (*)(void*))
const(0xbffff664, 0x81a7628, 0x80771dc, 0x4148b6be, 40) = 0xbffff390
sigc::slot_base::slot_base(sigc::internal::slot_rep*)(0xbffff450,
0x81a7628, 0xbffff450, 0xbffff5a0, 28732) = 0x81a7628
Glib::Thread::create(sigc::slot<void, sigc::nil, sigc::nil, sigc::nil,
sigc::nil, sigc::nil, sigc::nil, sigc::nil> const&, bool)(0xbffff450, 0,
0xbffff450, 0xbffff5a0, 28732 <unfinished ...>
operator new(unsigned int)(40, 0xbffff5f0, 0xbffff3c8, 0x4148b6be, 8) =
0x81a7860
sigc::trackable::trackable()(0x81a7860, 0xbffff5f0, 0xbffff3c8,
0x4148b6be, 8) = 0x81a7860
sigc::trackable::add_destroy_notify_callback(void*, void* (*)(void*))
const(0xbffff664, 0x81a7860, 0x80771dc, 0x4148b6be, 40) = 0xbffff310
Han ocurrido múltiples errores de segmentación; no se puede mostrar el
diálogo de error
+++ exited (status 1) +++
---------------------------------------------

Thanks in advance :)


-- 
-----------------------------------
Diego Fdez. Durán <diego goedi net>
Web: http://www.goedi.net
GPG ID: 90D266BB
-----------------------------------

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]