~rainct/libzeitgeist/986230

« back to all changes in this revision

Viewing changes to src/zeitgeist-log.c

  • Committer: Siegfried-Angel Gevatter Pujals
  • Date: 2012-04-23 19:18:52 UTC
  • Revision ID: siegfried@gevatter.com-20120423191852-cavrwdenxlx0m4cj
Return G_IO_ERROR_CANCELLED when the cancellable is activated

We do this by abusing GSimpleAsyncResult to get a copy of the
cancellable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
254
254
static gboolean
255
255
dispatch_async_callback_for_error (MethodDispatchContext *ctx)
256
256
{
257
 
  ctx->cb (G_OBJECT (ctx->self), NULL, ctx->user_data);
 
257
  GSimpleAsyncResult *async_result;
 
258
 
 
259
  async_result = g_simple_async_result_new (NULL,
 
260
                                            // This one shouldn't be NULL, but who cares?
 
261
                                            (GAsyncReadyCallback) NULL,
 
262
                                            ctx->cancellable,
 
263
                                            dispatch_async_callback_for_error);
 
264
 
 
265
  ctx->cb (G_OBJECT (ctx->self), (GAsyncResult *) async_result, ctx->user_data);
258
266
 
259
267
  g_object_unref (ctx->self);
260
268
  g_free (ctx);
515
523
}
516
524
 
517
525
static gboolean
518
 
log_has_error (ZeitgeistLog *self, GError **error)
 
526
log_has_error (ZeitgeistLog *self, GAsyncResult *res, GError **error)
519
527
{
520
528
  ZeitgeistLogPrivate *priv;
 
529
  GCancellable *cancellable;
521
530
  GError *error_copy;
522
531
 
523
532
  priv = ZEITGEIST_LOG_GET_PRIVATE (self);
524
533
 
525
534
  if (G_UNLIKELY (priv->log_error))
526
535
    {
527
 
      error_copy = g_error_copy (priv->log_error);
528
 
      g_propagate_error (error, error_copy);
 
536
      cancellable = g_async_result_get_user_data (res);
 
537
      if (g_cancellable_is_cancelled (cancellable))
 
538
        {
 
539
          *error = g_error_new (G_IO_ERROR,
 
540
                               G_IO_ERROR_CANCELLED,
 
541
                               "Operation was cancelled");
 
542
        }
 
543
      else
 
544
        {
 
545
          error_copy = g_error_copy (priv->log_error);
 
546
          g_propagate_error (error, error_copy);
 
547
        }
 
548
      g_object_unref (res);
529
549
      return TRUE;
530
550
    }
531
551
  else
548
568
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), NULL);
549
569
  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
550
570
 
551
 
  if (res == NULL && log_has_error (self, error))
 
571
  if (log_has_error (self, res, error))
552
572
    return NULL;
553
573
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
554
574
 
648
668
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), NULL);
649
669
  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
650
670
 
651
 
  if (res == NULL && log_has_error (self, error))
 
671
  if (log_has_error (self, res, error))
652
672
    return NULL;
653
673
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
654
674
 
731
751
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), NULL);
732
752
  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
733
753
 
734
 
  if (res == NULL && log_has_error (self, error))
 
754
  if (log_has_error (self, res, error))
735
755
    return NULL;
736
756
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
737
757
 
802
822
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), NULL);
803
823
  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
804
824
 
805
 
  if (res == NULL && log_has_error (self, error))
 
825
  if (log_has_error (self, res, error))
806
826
    return NULL;
807
827
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
808
828
 
915
935
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), FALSE);
916
936
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
917
937
 
918
 
  if (res == NULL && log_has_error (self, error))
 
938
  if (log_has_error (self, res, error))
919
939
    return FALSE;
920
940
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
921
941
 
995
1015
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), NULL);
996
1016
  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
997
1017
 
998
 
  if (res == NULL && log_has_error (self, error))
 
1018
  if (log_has_error (self, res, error))
999
1019
    return NULL;
1000
1020
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
1001
1021
 
1052
1072
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), FALSE);
1053
1073
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
1054
1074
 
1055
 
  if (res == NULL && log_has_error (self, error))
 
1075
  if (log_has_error (self, res, error))
1056
1076
    return FALSE;
1057
1077
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
1058
1078
 
1101
1121
  g_return_val_if_fail (ZEITGEIST_IS_LOG (self), FALSE);
1102
1122
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
1103
1123
 
1104
 
  if (res == NULL && log_has_error (self, error))
 
1124
  if (log_has_error (self, res, error))
1105
1125
    return FALSE;
1106
1126
  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
1107
1127