aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2022-07-24 14:54:49 +0200
committerAleksander Morgado <aleksander@aleksander.es>2022-07-24 13:14:26 +0000
commit041f53af8b138fda6242ad1381fd3cd1c2ff6c81 (patch)
tree1dafe222a0816efde471f75e12a9a1c70a898cc4 /src
parent4aaea370228fdc873ac34c3fa542088a2893f2db (diff)
base-sms: don't clear parts on send/store error
The part generation logic is independent to whether the SMS send or store operation failed, so just avoid doing the parts cleanup. E.g. if we created the parts for store() but storing failed, the same parts could still be used for send() successfully.
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-sms.c51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c
index e84ece62..90dda3d2 100644
--- a/src/mm-base-sms.c
+++ b/src/mm-base-sms.c
@@ -343,20 +343,18 @@ handle_store_ready (MMBaseSms *self,
GError *error = NULL;
if (!MM_BASE_SMS_GET_CLASS (self)->store_finish (self, res, &error)) {
- /* On error, clear up the parts we generated */
- g_list_free_full (self->priv->parts, (GDestroyNotify)mm_sms_part_free);
- self->priv->parts = NULL;
g_dbus_method_invocation_take_error (ctx->invocation, error);
- } else {
- mm_gdbus_sms_set_storage (MM_GDBUS_SMS (ctx->self), ctx->storage);
+ handle_store_context_free (ctx);
+ return;
+ }
- /* Transition from Unknown->Stored for SMS which were created by the user */
- if (mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_UNKNOWN)
- mm_gdbus_sms_set_state (MM_GDBUS_SMS (ctx->self), MM_SMS_STATE_STORED);
+ mm_gdbus_sms_set_storage (MM_GDBUS_SMS (ctx->self), ctx->storage);
- mm_gdbus_sms_complete_store (MM_GDBUS_SMS (ctx->self), ctx->invocation);
- }
+ /* Transition from Unknown->Stored for SMS which were created by the user */
+ if (mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_UNKNOWN)
+ mm_gdbus_sms_set_state (MM_GDBUS_SMS (ctx->self), MM_SMS_STATE_STORED);
+ mm_gdbus_sms_complete_store (MM_GDBUS_SMS (ctx->self), ctx->invocation);
handle_store_context_free (ctx);
}
@@ -524,26 +522,25 @@ handle_send_ready (MMBaseSms *self,
GError *error = NULL;
if (!MM_BASE_SMS_GET_CLASS (self)->send_finish (self, res, &error)) {
- /* On error, clear up the parts we generated */
- g_list_free_full (self->priv->parts, (GDestroyNotify)mm_sms_part_free);
- self->priv->parts = NULL;
g_dbus_method_invocation_take_error (ctx->invocation, error);
- } else {
- /* Transition from Unknown->Sent or Stored->Sent */
- if (mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_UNKNOWN ||
- mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_STORED) {
- GList *l;
-
- /* Update state */
- mm_gdbus_sms_set_state (MM_GDBUS_SMS (ctx->self), MM_SMS_STATE_SENT);
- /* Grab last message reference */
- l = g_list_last (mm_base_sms_get_parts (ctx->self));
- mm_gdbus_sms_set_message_reference (MM_GDBUS_SMS (ctx->self),
- mm_sms_part_get_message_reference ((MMSmsPart *)l->data));
- }
- mm_gdbus_sms_complete_send (MM_GDBUS_SMS (ctx->self), ctx->invocation);
+ handle_send_context_free (ctx);
+ return;
+ }
+
+ /* Transition from Unknown->Sent or Stored->Sent */
+ if (mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_UNKNOWN ||
+ mm_gdbus_sms_get_state (MM_GDBUS_SMS (ctx->self)) == MM_SMS_STATE_STORED) {
+ GList *l;
+
+ /* Update state */
+ mm_gdbus_sms_set_state (MM_GDBUS_SMS (ctx->self), MM_SMS_STATE_SENT);
+ /* Grab last message reference */
+ l = g_list_last (mm_base_sms_get_parts (ctx->self));
+ mm_gdbus_sms_set_message_reference (MM_GDBUS_SMS (ctx->self),
+ mm_sms_part_get_message_reference ((MMSmsPart *)l->data));
}
+ mm_gdbus_sms_complete_send (MM_GDBUS_SMS (ctx->self), ctx->invocation);
handle_send_context_free (ctx);
}