[telepathy-mission-control/telepathy-mission-control-5.2] McdAccount: turn the lowmem check for requests into an overridable virtual method
Simon McVittie
simon.mcvittie at collabora.co.uk
Fri Aug 21 03:02:43 PDT 2009
---
src/mcd-account-priv.h | 5 ++++-
src/mcd-account-requests.c | 34 ++++++++++++++++++++++++++++++++--
src/mcd-account.c | 1 +
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 3374046..bd4fa0e 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 fda4ab5..ba4dc34 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 07d5eca..39ecac6 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 de8008a..0b3befc 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
--
1.5.6.5
More information about the telepathy-commits
mailing list