After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 166412 - gtkmm/examples/dnd/testdnd crashs
gtkmm/examples/dnd/testdnd crashs
Status: RESOLVED FIXED
Product: gtkmm
Classification: Bindings
Component: general
2.4
Other All
: Normal major
: ---
Assigned To: gtkmm-forge
gtkmm-forge
Depends on:
Blocks:
 
 
Reported: 2005-02-06 01:59 UTC by Ronald Lembcke
Modified: 2005-02-14 11:34 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Ronald Lembcke 2005-02-06 01:59:09 UTC
Steps to reproduce:
1. Just start the program
2. Drag "drag here" to the dustbin
3. The program starts eating memory until it is killed by the OOM-killer

The crash happens in
bool DnDWindow::on_image_drag_motion(const Glib::RefPtr<Gdk::DragContext>&
context, int, int, guint time)
at
  type_targets targets = context->get_targets();


Stack trace:
  • #0 raise
    from /lib/tls/libc.so.6
  • #0 raise
    from /lib/tls/libc.so.6
  • #1 abort
    from /lib/tls/libc.so.6
  • #2 g_logv
    from /usr/lib/libglib-2.0.so.0
  • #3 g_log
    from /usr/lib/libglib-2.0.so.0
  • #4 (anonymous namespace)::glibmm_unexpected_exception
    from /usr/lib/libglibmm-2.4.so.1
  • #5 Glib::exception_handlers_invoke
    from /usr/lib/libglibmm-2.4.so.1
  • #6 (anonymous namespace)::Widget_signal_drag_motion_callback
    from /usr/local/lib/libgtkmm-2.4.so.1
  • #7 _gtk_marshal_BOOLEAN__OBJECT_INT_INT_UINT
    from /usr/lib/libgtk-x11-2.0.so.0
  • #8 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #9 g_signal_emit_by_name
    from /usr/lib/libgobject-2.0.so.0
  • #10 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #11 g_signal_emit_by_name
    from /usr/lib/libgobject-2.0.so.0
  • #12 gtk_drag_dest_find_target
    from /usr/lib/libgtk-x11-2.0.so.0
  • #13 gtk_drag_dest_find_target
    from /usr/lib/libgtk-x11-2.0.so.0
  • #14 gtk_drag_dest_find_target
    from /usr/lib/libgtk-x11-2.0.so.0
  • #15 gtk_drag_dest_find_target
    from /usr/lib/libgtk-x11-2.0.so.0
  • #16 _gtk_drag_dest_handle_event
    from /usr/lib/libgtk-x11-2.0.so.0
  • #17 gtk_main_do_event
    from /usr/lib/libgtk-x11-2.0.so.0
  • #18 _gdk_events_queue
    from /usr/lib/libgdk-x11-2.0.so.0
  • #19 g_main_depth
    from /usr/lib/libglib-2.0.so.0
  • #20 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #21 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #22 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #23 gtk_main
    from /usr/lib/libgtk-x11-2.0.so.0
  • #24 Gtk::Main::run_impl
    from /usr/local/lib/libgtkmm-2.4.so.1
  • #25 Gtk::Main::run
    from /usr/local/lib/libgtkmm-2.4.so.1
  • #26 main
    at main.cc line 27


Other information:
I think the problem is in gtkmm/gdk/gdkmm/dragcontext.cc Glib::StringArrayHandle
DragContext::get_targets() const

There a GList should be walked to create a std::list ... but something like
  list = list->next
seems to be missing.
Comment 1 Ronald Lembcke 2005-02-06 10:21:42 UTC
This seems to help:

--- dragcontext.ccg     13 Feb 2004 18:20:38 -0000      1.5
+++ dragcontext.ccg     6 Feb 2005 10:20:16 -0000
@@ -58,6 +58,7 @@
       target = Glib::ScopedPtr<char>(atom_name).get(); //This frees the gchar*.
       
     listTargets.push_back(target);
+    list = list->next;
   }
 
   return listTargets;
Comment 2 Murray Cumming 2005-02-07 10:43:14 UTC
Well done. Applied. Thanks.

Please attach patches in future, and patch the ChangeLog:
http://www.gtkmm.org/bugs.shtml#CreatingPatches
Comment 3 Billy O'Connor 2005-02-13 11:58:42 UTC
this is showing up in HEAD as:

list = list->next();

rather than 

list = list->next;
Comment 4 Murray Cumming 2005-02-14 11:34:07 UTC
Thus proving that patches are best.

However, I fixed this yesterday.