diff --git a/src/engine/Account.c b/src/engine/Account.c index 548920cc1a..4b3095343b 100644 --- a/src/engine/Account.c +++ b/src/engine/Account.c @@ -268,6 +268,12 @@ gnc_account_finalize(GObject* acctp) G_OBJECT_CLASS(gnc_account_parent_class)->finalize(acctp); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_account_get_property (GObject *object, guint prop_id, @@ -306,7 +312,7 @@ gnc_account_get_property (GObject *object, g_value_set_int(value, priv->type); break; case PROP_COMMODITY: - g_value_set_object(value, priv->commodity); + g_value_take_object(value, priv->commodity); break; case PROP_COMMODITY_SCU: g_value_set_int(value, priv->commodity_scu); diff --git a/src/engine/SchedXaction.c b/src/engine/SchedXaction.c index bd38d5ff78..0943c2ba15 100644 --- a/src/engine/SchedXaction.c +++ b/src/engine/SchedXaction.c @@ -92,6 +92,12 @@ gnc_schedxaction_finalize(GObject* sxp) G_OBJECT_CLASS(gnc_schedxaction_parent_class)->finalize(sxp); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_schedxaction_get_property (GObject *object, guint prop_id, @@ -148,7 +154,7 @@ gnc_schedxaction_get_property (GObject *object, g_value_set_int(value, sx->instance_num); break; case PROP_TEMPLATE_ACCOUNT: - g_value_set_object(value, sx->template_acct); + g_value_take_object(value, sx->template_acct); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/engine/Split.c b/src/engine/Split.c index a984521e60..ad74c13dba 100644 --- a/src/engine/Split.c +++ b/src/engine/Split.c @@ -113,7 +113,12 @@ gnc_split_finalize(GObject* splitp) { G_OBJECT_CLASS(gnc_split_parent_class)->finalize(splitp); } - +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_split_get_property(GObject *object, guint prop_id, @@ -143,13 +148,13 @@ gnc_split_get_property(GObject *object, g_value_set_boxed(value, &split->date_reconciled); break; case PROP_TX: - g_value_set_object(value, split->parent); + g_value_take_object(value, split->parent); break; case PROP_ACCOUNT: - g_value_set_object(value, split->acc); + g_value_take_object(value, split->acc); break; case PROP_LOT: - g_value_set_object(value, split->lot); + g_value_take_object(value, split->lot); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index d38f4d70fa..567a2756b8 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -289,6 +289,12 @@ gnc_transaction_finalize(GObject* txnp) G_OBJECT_CLASS(gnc_transaction_parent_class)->finalize(txnp); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_transaction_get_property(GObject* object, guint prop_id, @@ -309,7 +315,7 @@ gnc_transaction_get_property(GObject* object, g_value_set_string(value, tx->description); break; case PROP_CURRENCY: - g_value_set_object(value, tx->common_currency); + g_value_take_object(value, tx->common_currency); break; case PROP_POST_DATE: g_value_set_boxed(value, &tx->date_posted); diff --git a/src/engine/gnc-commodity.c b/src/engine/gnc-commodity.c index dfe3709b0e..fabb3ebbba 100644 --- a/src/engine/gnc-commodity.c +++ b/src/engine/gnc-commodity.c @@ -626,7 +626,12 @@ gnc_commodity_finalize(GObject* comp) { G_OBJECT_CLASS(gnc_commodity_parent_class)->finalize(comp); } - +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_commodity_get_property (GObject *object, guint prop_id, @@ -643,7 +648,7 @@ gnc_commodity_get_property (GObject *object, switch (prop_id) { case PROP_NAMESPACE: - g_value_set_object(value, priv->namespace); + g_value_take_object(value, priv->namespace); break; case PROP_FULL_NAME: g_value_set_string(value, priv->fullname); diff --git a/src/engine/gnc-pricedb.c b/src/engine/gnc-pricedb.c index f831191787..06efd79f07 100644 --- a/src/engine/gnc-pricedb.c +++ b/src/engine/gnc-pricedb.c @@ -73,6 +73,12 @@ gnc_price_finalize(GObject* pricep) G_OBJECT_CLASS(gnc_price_parent_class)->finalize(pricep); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_price_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { @@ -93,10 +99,10 @@ gnc_price_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec g_value_set_boxed(value, &price->value); break; case PROP_COMMODITY: - g_value_set_object(value, price->commodity); + g_value_take_object(value, price->commodity); break; case PROP_CURRENCY: - g_value_set_object(value, price->currency); + g_value_take_object(value, price->currency); break; case PROP_DATE: g_value_set_boxed(value, &price->tmspec); diff --git a/src/engine/gncEmployee.c b/src/engine/gncEmployee.c index dae4093b5f..94d7a72fce 100644 --- a/src/engine/gncEmployee.c +++ b/src/engine/gncEmployee.c @@ -111,6 +111,12 @@ gnc_employee_finalize(GObject* empp) G_OBJECT_CLASS(gnc_employee_parent_class)->finalize(empp); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_employee_get_property (GObject *object, guint prop_id, @@ -137,13 +143,13 @@ gnc_employee_get_property (GObject *object, g_value_set_string(value, emp->language); break; case PROP_CURRENCY: - g_value_set_object(value, emp->currency); + g_value_take_object(value, emp->currency); break; case PROP_ACL: g_value_set_string(value, emp->acl); break; case PROP_ADDRESS: - g_value_set_object(value, emp->addr); + g_value_take_object(value, emp->addr); break; case PROP_WORKDAY: g_value_set_boxed(value, &emp->workday); @@ -152,7 +158,7 @@ gnc_employee_get_property (GObject *object, g_value_set_boxed(value, &emp->rate); break; case PROP_CCARD: - g_value_set_object(value, emp->ccard_acc); + g_value_take_object(value, emp->ccard_acc); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/engine/gncVendor.c b/src/engine/gncVendor.c index 618aa6feec..d416db4627 100644 --- a/src/engine/gncVendor.c +++ b/src/engine/gncVendor.c @@ -121,6 +121,12 @@ gnc_vendor_finalize(GObject* vendorp) G_OBJECT_CLASS(gnc_vendor_parent_class)->finalize(vendorp); } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_vendor_get_property (GObject *object, guint prop_id, @@ -144,7 +150,7 @@ gnc_vendor_get_property (GObject *object, g_value_set_string(value, vendor->notes); break; case PROP_CURRENCY: - g_value_set_object(value, vendor->currency); + g_value_take_object(value, vendor->currency); break; case PROP_ACTIVE: g_value_set_boolean(value, vendor->active); @@ -153,13 +159,13 @@ gnc_vendor_get_property (GObject *object, g_value_set_boolean(value, vendor->taxtable_override); break; case PROP_BILLTERMS: - g_value_set_object(value, vendor->terms); + g_value_take_object(value, vendor->terms); break; case PROP_TAXTABLE: - g_value_set_object(value, vendor->taxtable); + g_value_take_object(value, vendor->taxtable); break; case PROP_ADDRESS: - g_value_set_object(value, vendor->addr); + g_value_take_object(value, vendor->addr); break; case PROP_TAX_INCLUDED: g_value_set_int(value, vendor->taxincluded); diff --git a/src/gnome-utils/gnc-combott.c b/src/gnome-utils/gnc-combott.c index 488041154b..8e9facf475 100644 --- a/src/gnome-utils/gnc-combott.c +++ b/src/gnome-utils/gnc-combott.c @@ -277,7 +277,12 @@ gctt_set_property (GObject *object, } } - +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gctt_get_property (GObject *object, guint param_id, @@ -289,7 +294,7 @@ gctt_get_property (GObject *object, switch (param_id) { case PROP_MODEL: - g_value_set_object (value, priv->model); + g_value_take_object (value, priv->model); break; case PROP_ACTIVE: diff --git a/src/gnome-utils/gnc-plugin-page.c b/src/gnome-utils/gnc-plugin-page.c index 358b9b1861..86a803b606 100644 --- a/src/gnome-utils/gnc-plugin-page.c +++ b/src/gnome-utils/gnc-plugin-page.c @@ -605,6 +605,12 @@ gnc_plugin_page_finalize (GObject *object) * * @param pspec A pointer to the meta data that described the property * being retrieved. */ +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_plugin_page_get_property (GObject *object, guint prop_id, @@ -639,10 +645,10 @@ gnc_plugin_page_get_property (GObject *object, g_value_set_string (value, priv->ui_description); break; case PROP_UI_MERGE: - g_value_set_object (value, priv->ui_merge); + g_value_take_object (value, priv->ui_merge); break; case PROP_ACTION_GROUP: - g_value_set_object (value, priv->action_group); + g_value_take_object (value, priv->action_group); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); diff --git a/src/libqof/qof/qofinstance.c b/src/libqof/qof/qofinstance.c index 469b2e2be5..2cff3d1b59 100644 --- a/src/libqof/qof/qofinstance.c +++ b/src/libqof/qof/qofinstance.c @@ -353,6 +353,12 @@ qof_instance_finalize_real (GObject *instp) priv->dirty = FALSE; } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void qof_instance_get_property (GObject *object, guint prop_id, @@ -376,7 +382,7 @@ qof_instance_get_property (GObject *object, g_value_set_pointer(value, priv->collection); break; case PROP_BOOK: - g_value_set_object(value, priv->book); + g_value_take_object(value, priv->book); break; case PROP_KVP_DATA: g_value_set_pointer(value, inst->kvp_data); diff --git a/src/register/register-gnome/gnucash-cursor.c b/src/register/register-gnome/gnucash-cursor.c index 912b728716..bba40d9063 100644 --- a/src/register/register-gnome/gnucash-cursor.c +++ b/src/register/register-gnome/gnucash-cursor.c @@ -465,6 +465,12 @@ gnucash_cursor_set_property (GObject *object, } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnucash_cursor_get_property (GObject *object, guint prop_id, @@ -476,10 +482,10 @@ gnucash_cursor_get_property (GObject *object, switch (prop_id) { case PROP_SHEET: - g_value_set_object (value, cursor->sheet); + g_value_take_object (value, cursor->sheet); break; case PROP_GRID: - g_value_set_object (value, cursor->grid); + g_value_take_object (value, cursor->grid); break; default: break; diff --git a/src/register/register-gnome/gnucash-grid.c b/src/register/register-gnome/gnucash-grid.c index 1578cbf33c..d357c8f164 100644 --- a/src/register/register-gnome/gnucash-grid.c +++ b/src/register/register-gnome/gnucash-grid.c @@ -822,6 +822,12 @@ gnucash_grid_set_property (GObject *object, } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnucash_grid_get_property (GObject *object, guint prop_id, @@ -833,7 +839,7 @@ gnucash_grid_get_property (GObject *object, switch (prop_id) { case PROP_SHEET: - g_value_set_object (value, grid->sheet); + g_value_take_object (value, grid->sheet); break; default: break; diff --git a/src/register/register-gnome/gnucash-header.c b/src/register/register-gnome/gnucash-header.c index 23dd28060e..dddd7bb47c 100644 --- a/src/register/register-gnome/gnucash-header.c +++ b/src/register/register-gnome/gnucash-header.c @@ -595,6 +595,12 @@ gnc_header_event (GnomeCanvasItem *item, GdkEvent *event) } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_header_get_property (GObject *object, guint param_id, @@ -606,7 +612,7 @@ gnc_header_get_property (GObject *object, switch (param_id) { case PROP_SHEET: - g_value_set_object (value, header->sheet); + g_value_take_object (value, header->sheet); break; case PROP_CURSOR_NAME: g_value_set_string (value, header->cursor_name); diff --git a/src/register/register-gnome/gnucash-item-edit.c b/src/register/register-gnome/gnucash-item-edit.c index cfaba5519e..3486ffbc8c 100644 --- a/src/register/register-gnome/gnucash-item-edit.c +++ b/src/register/register-gnome/gnucash-item-edit.c @@ -1055,6 +1055,12 @@ disconnect_popup_toggle_signals (GncItemEdit *item_edit) item_edit->popup_toggle.signals_connected = FALSE; } +/* Note that g_value_set_object() refs the object, as does + * g_object_get(). But g_object_get() only unrefs once when it disgorges + * the object, leaving an unbalanced ref, which leaks. So instead of + * using g_value_set_object(), use g_value_take_object() which doesn't + * ref the object when used in get_property(). + */ static void gnc_item_edit_get_property (GObject *object, guint param_id, @@ -1066,10 +1072,10 @@ gnc_item_edit_get_property (GObject *object, switch (param_id) { case PROP_SHEET: - g_value_set_object (value, item_edit->sheet); + g_value_take_object (value, item_edit->sheet); break; case PROP_EDITOR: - g_value_set_object (value, item_edit->editor); + g_value_take_object (value, item_edit->editor); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);