Re: Problem constructing GooCanvasModel* objects



Build goocanvas and run:
libgoocanvasmm/examples/moving_shapes/moving_shapes

I just comitted some stuff, but I don't think its anything that would
affect this. You might want to update just in case though.

Paul

On 5/22/07, Murray Cumming <murrayc murrayc com> wrote:
How can I reproduce this?

On Mon, 2007-05-21 at 19:45 -0500, Paul Davis wrote:
> Hey,
>
> I played around with gdb to try and figure out these error messages:
>
> (lt-moving_shapes:25873): glibmm-WARNING **: This object, of type
> GooCanvasRectModel, already has a wrapper.
> You should use wrap() instead of a constructor.
>
> Setting a breakpoint at objectbase.cc:89
> I managed to get this backtrace:
>
> Breakpoint 2, Glib::ObjectBase::initialize (this=0x80c0668,
> castitem=0x8087960) at objectbase.cc:89
> 89        _set_current_wrapper(castitem);
> (gdb) bt
> #0  Glib::ObjectBase::initialize (this=0x80c0668, castitem=0x8087960)
> at objectbase.cc:89
> #1  0xb7b555e6 in Object (this=0x8087960, __vtt_parm=0xb7f48368,
> castitem=0x0) at object.cc:257
> #2  0xb7f2fd08 in ItemModelSimple (this=0x80c0660,
> __vtt_parm=0xb7f48364, castitem=0x0) at itemmodelsimple.cc:112
> #3  0xb7f3645f in RectModel (this=0x80c0660, castitem=0x0) at rectmodel.cc:124
> #4  0xb7f364e1 in Goocanvas::RectModel_Class::wrap_new (object=0x0) at
> rectmodel.cc:105
> #5  0xb7b5d915 in create_new_wrapper (object=0x8087960) at wrap.cc:71
> #6  0xb7b5d9a8 in Glib::wrap_auto (object=0x8087960, take_copy=true)
> at wrap.cc:138
> #7  0xb7f2ec17 in Glib::wrap (object=0x0, take_copy=true) at itemmodel.cc:42
> #8  0xb7f261b1 in Canvas_signal_item_created_callback (self=0x0,
> p0=0x0, p1=0x0, data=0x80baef0) at canvas.cc:80
> #9  0xb7b0830b in goo_canvas_marshal_VOID__OBJECT_OBJECT
> (closure=0x80baf50, return_value=0x0, n_param_values=3,
> param_values=0xbfb5d16c, invocation_hint=0xbfb5d05c,
>     marshal_data=0xb7f26152) at goocanvasmarshal.c:125
> #10 0xb73d2e3f in IA__g_closure_invoke (closure=0x80baf50,
> return_value=0x0, n_param_values=0, param_values=0x0,
> invocation_hint=0x0) at gclosure.c:490
> #11 0xb73e354c in signal_emit_unlocked_R (node=0x80b47f8, detail=0,
> instance=0x80b7018, emission_return=0x0,
> instance_and_params=0xbfb5d16c) at gsignal.c:2510
> #12 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80b7018,
> signal_id=87, detail=0, var_args=<value optimized out>) at
> gsignal.c:2199
> #13 0xb73e4e49 in IA__g_signal_emit (instance=0x0, signal_id=0,
> detail=0) at gsignal.c:2243
> #14 0xb7b16304 in goo_canvas_create_item (canvas=0x80b7018,
> model=0x8087960) at goocanvas.c:1875
> #15 0xb7afe72f in on_model_child_added (model=0x0, position=0,
> group=0x8083e48) at goocanvasgroup.c:277
> #16 0xb73e01b9 in IA__g_cclosure_marshal_VOID__INT (closure=0x80bf4e0,
> return_value=0x0, n_param_values=2, param_values=0xbfb5d67c,
> invocation_hint=0xbfb5d56c,
>     marshal_data=0xb7afe6f7) at gmarshal.c:216
> #17 0xb73d2e3f in IA__g_closure_invoke (closure=0x80bf4e0,
> return_value=0x0, n_param_values=0, param_values=0x0,
> invocation_hint=0x0) at gclosure.c:490
> #18 0xb73e2fd5 in signal_emit_unlocked_R (node=0x80bb0e0, detail=0,
> instance=0x80ba4e0, emission_return=0x0,
> instance_and_params=0xbfb5d67c) at gsignal.c:2440
> #19 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80ba4e0,
> signal_id=101, detail=0, var_args=<value optimized out>) at
> gsignal.c:2199
> #20 0xb73e7fe0 in IA__g_signal_emit_by_name (instance=0x80ba4e0,
> detailed_signal=0xb7b19b2e "child-added") at gsignal.c:2267
> #21 0xb7aff142 in goo_canvas_group_model_add_child (model=0x80ba4e0,
> child=0x8087960, position=0) at goocanvasgroup.c:690
> #22 0xb7b0392c in goo_canvas_item_model_add_child (model=0x80ba4e0,
> child=0x0, position=0) at goocanvasitemmodel.c:278
> #23 0xb7b0b587 in goo_canvas_rect_model_new (parent=0x80ba4e0, x=200,
> y=200, width=100, height=100) at goocanvasrect.c:543
> #24 0xb7f362dc in RectModel (this=0x80bec10, parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:33
> #25 0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:146
> #26 0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
> #27 0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
> (gdb) continue
> Continuing.
>
> Breakpoint 2, Glib::ObjectBase::initialize (this=0x80c0688,
> castitem=0x80bfe70) at objectbase.cc:89
> 89        _set_current_wrapper(castitem);
> (gdb) bt
> #0  Glib::ObjectBase::initialize (this=0x80c0688, castitem=0x80bfe70)
> at objectbase.cc:89
> #1  0xb7b555e6 in Object (this=0x80bfe70, __vtt_parm=0xb7f480a8,
> castitem=0x0) at object.cc:257
> #2  0xb7f30d8e in ItemSimple (this=0x80c0680, __vtt_parm=0xb7f480a4,
> castitem=0x0) at itemsimple.cc:113
> #3  0xb7f35961 in Rect (this=0x80c0680, castitem=0x0) at rect.cc:124
> #4  0xb7f359e3 in Goocanvas::Rect_Class::wrap_new (object=0x0) at rect.cc:105
> #5  0xb7b5d915 in create_new_wrapper (object=0x80bfe70) at wrap.cc:71
> #6  0xb7b5d9a8 in Glib::wrap_auto (object=0x80bfe70, take_copy=true)
> at wrap.cc:138
> #7  0xb7f2b1a5 in Glib::wrap (object=0x0, take_copy=true) at item.cc:725
> #8  0xb7f261d4 in Canvas_signal_item_created_callback (self=0x0,
> p0=0x0, p1=0x0, data=0x80baef0) at canvas.cc:80
> #9  0xb7b0830b in goo_canvas_marshal_VOID__OBJECT_OBJECT
> (closure=0x80baf50, return_value=0x0, n_param_values=3,
> param_values=0xbfb5d16c, invocation_hint=0xbfb5d05c,
>     marshal_data=0xb7f26152) at goocanvasmarshal.c:125
> #10 0xb73d2e3f in IA__g_closure_invoke (closure=0x80baf50,
> return_value=0x0, n_param_values=0, param_values=0x0,
> invocation_hint=0x0) at gclosure.c:490
> #11 0xb73e354c in signal_emit_unlocked_R (node=0x80b47f8, detail=0,
> instance=0x80b7018, emission_return=0x0,
> instance_and_params=0xbfb5d16c) at gsignal.c:2510
> #12 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80b7018,
> signal_id=87, detail=0, var_args=<value optimized out>) at
> gsignal.c:2199
> #13 0xb73e4e49 in IA__g_signal_emit (instance=0x0, signal_id=0,
> detail=0) at gsignal.c:2243
> #14 0xb7b16304 in goo_canvas_create_item (canvas=0x80b7018,
> model=0x8087960) at goocanvas.c:1875
> #15 0xb7afe72f in on_model_child_added (model=0x0, position=0,
> group=0x8083e48) at goocanvasgroup.c:277
> #16 0xb73e01b9 in IA__g_cclosure_marshal_VOID__INT (closure=0x80bf4e0,
> return_value=0x0, n_param_values=2, param_values=0xbfb5d67c,
> invocation_hint=0xbfb5d56c,
>     marshal_data=0xb7afe6f7) at gmarshal.c:216
> #17 0xb73d2e3f in IA__g_closure_invoke (closure=0x80bf4e0,
> return_value=0x0, n_param_values=0, param_values=0x0,
> invocation_hint=0x0) at gclosure.c:490
> #18 0xb73e2fd5 in signal_emit_unlocked_R (node=0x80bb0e0, detail=0,
> instance=0x80ba4e0, emission_return=0x0,
> instance_and_params=0xbfb5d67c) at gsignal.c:2440
> #19 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80ba4e0,
> signal_id=101, detail=0, var_args=<value optimized out>) at
> gsignal.c:2199
> #20 0xb73e7fe0 in IA__g_signal_emit_by_name (instance=0x80ba4e0,
> detailed_signal=0xb7b19b2e "child-added") at gsignal.c:2267
> #21 0xb7aff142 in goo_canvas_group_model_add_child (model=0x80ba4e0,
> child=0x8087960, position=0) at goocanvasgroup.c:690
> #22 0xb7b0392c in goo_canvas_item_model_add_child (model=0x80ba4e0,
> child=0x0, position=0) at goocanvasitemmodel.c:278
> #23 0xb7b0b587 in goo_canvas_rect_model_new (parent=0x80ba4e0, x=200,
> y=200, width=100, height=100) at goocanvasrect.c:543
> #24 0xb7f362dc in RectModel (this=0x80bec10, parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:33
> #25 0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:146
> #26 0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
> #27 0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
> (gdb) continue
> Continuing.
>
> Breakpoint 2, Glib::ObjectBase::initialize (this=0x80bec18,
> castitem=0x8087960) at objectbase.cc:89
> 89        _set_current_wrapper(castitem);
> (gdb) bt
> #0  Glib::ObjectBase::initialize (this=0x80bec18, castitem=0x8087960)
> at objectbase.cc:89
> #1  0xb7b555e6 in Object (this=0x8087960, __vtt_parm=0xb7f48368,
> castitem=0x0) at object.cc:257
> #2  0xb7f2fd08 in ItemModelSimple (this=0x80bec10,
> __vtt_parm=0xb7f48364, castitem=0x0) at itemmodelsimple.cc:112
> #3  0xb7f362fe in RectModel (this=0x80bec10, parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:33
> #4  0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
> y=200, width=100, height=100) at rectmodel.cc:146
> #5  0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
> #6  0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
> (gdb) continue
> Continuing.
>
> (moving_shapes:26016): glibmm-WARNING **: This object, of type
> GooCanvasRectModel, already has a wrapper.
> You should use wrap() instead of a constructor.
>
> So, this is my theory about whats going on:
>
> 1. Call to C++ RectModel constructor
> 2. Inner workings of GooCanvas emits the item_created signal
> (for reference: void signal_item_create( const
> Glib::RefPtr<Goocanvas::Item>& item, const
> Glib::RefPtr<Goocanvas::Model>& model ) is the signature of that
> callback.)
> 3. When the signal is emitted, a temporary Goocanvas::Model object is created
> 4. signal returns, control returns back to the orignal C++ constructor
> 5. This causes the 'second instantiation' problem that Glib reports.
>
> Soooo, anyone have any ideas?
>
> Thanks,
> Paul Davis
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
--
Murray Cumming
murrayc murrayc com
www.murrayc.com
www.openismus.com





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