diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2009-08-21 11:02:43 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2009-08-21 11:02:43 +0100 |
commit | 1193f79b5c4526a6043da6d3902a9071ac25252b (patch) | |
tree | 31b5b3d8a1c1ba0fb6dbe11c899bfa72fe92d1f6 | |
parent | 063f515dd919c6988ed63c52d7b49d8ff5ad7e10 (diff) |
McdAccount: turn the lowmem check for requests into an overridable virtual method
-rw-r--r-- | src/mcd-account-priv.h | 5 | ||||
-rw-r--r-- | src/mcd-account-requests.c | 34 | ||||
-rw-r--r-- | src/mcd-account.c | 1 | ||||
-rw-r--r-- | src/mcd-account.h | 6 |
4 files changed, 42 insertions, 4 deletions
diff --git a/src/mcd-account-priv.h b/src/mcd-account-priv.h index 33740460..bd4fa0e1 100644 --- a/src/mcd-account-priv.h +++ b/src/mcd-account-priv.h @@ -165,5 +165,8 @@ void account_stats_iface_init (McSvcAccountInterfaceStatsClass *iface, gpointer iface_data); void account_stats_instance_init (TpSvcDBusProperties *self); -#endif /* __MCD_ACCOUNT_PRIV_H__ */ +G_GNUC_INTERNAL gboolean _mcd_account_check_request_real (McdAccount *account, + GHashTable *request, + GError **error); +#endif /* __MCD_ACCOUNT_PRIV_H__ */ diff --git a/src/mcd-account-requests.c b/src/mcd-account-requests.c index fda4ab58..ba4dc34f 100644 --- a/src/mcd-account-requests.c +++ b/src/mcd-account-requests.c @@ -171,9 +171,8 @@ _mcd_account_create_request (McdAccount *account, GHashTable *properties, mcd_account_get_account_manager (account)); DBusGConnection *dgc = tp_proxy_get_dbus_connection (dbus_daemon); - if (mcd_master_has_low_memory (mcd_master_get_default ())) + if (!mcd_account_check_request (account, properties, error)) { - g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory"); return NULL; } @@ -320,3 +319,34 @@ account_channelrequests_iface_init (McSvcAccountInterfaceChannelRequestsClass *i #undef IMPLEMENT } +gboolean +mcd_account_check_request (McdAccount *account, GHashTable *request, + GError **error) +{ + gboolean (*impl) (McdAccount *account, GHashTable *request, + GError **error); + + g_return_val_if_fail (MCD_IS_ACCOUNT (account), FALSE); + g_return_val_if_fail (request != NULL, FALSE); + + impl = MCD_ACCOUNT_GET_CLASS (account)->check_request; + + if (impl == NULL) + return TRUE; + + return impl (account, request, error); +} + +/* Default implementation of check_request */ +gboolean +_mcd_account_check_request_real (McdAccount *account, GHashTable *request, + GError **error) +{ + if (mcd_master_has_low_memory (mcd_master_get_default ())) + { + g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory"); + return FALSE; + } + + return TRUE; +} diff --git a/src/mcd-account.c b/src/mcd-account.c index 07d5ecab..39ecac60 100644 --- a/src/mcd-account.c +++ b/src/mcd-account.c @@ -2125,6 +2125,7 @@ mcd_account_class_init (McdAccountClass * klass) klass->set_parameter = set_parameter; klass->delete = _mcd_account_delete; klass->load = _mcd_account_load_real; + klass->check_request = _mcd_account_check_request_real; g_object_class_install_property (object_class, PROP_DBUS_DAEMON, diff --git a/src/mcd-account.h b/src/mcd-account.h index de8008a3..0b3befcc 100644 --- a/src/mcd-account.h +++ b/src/mcd-account.h @@ -62,7 +62,8 @@ struct _McdAccountClass gboolean (*delete) (McdAccount *account, GError **error); void (*load) (McdAccount *account, McdAccountLoadCb callback, gpointer user_data); - void (*_mc_reserved5) (void); + gboolean (*check_request) (McdAccount *account, GHashTable *request, + GError **error); void (*_mc_reserved6) (void); void (*_mc_reserved7) (void); }; @@ -116,4 +117,7 @@ TpConnectionStatusReason mcd_account_get_connection_status_reason (McdAccount *a McdConnection *mcd_account_get_connection (McdAccount *account); +gboolean mcd_account_check_request (McdAccount *account, GHashTable *request, + GError **error); + #endif |