summaryrefslogtreecommitdiff
path: root/rsvg-base.c
diff options
context:
space:
mode:
authorChristian Persch <chpe@gnome.org>2012-01-27 22:22:22 +0100
committerChristian Persch <chpe@gnome.org>2012-01-27 22:34:26 +0100
commitcf1c41c94f50b20fff4a29fc4ca5fca2bee2a18b (patch)
treed94fe06f162a6d5bb346dad78bb7d80ffa5680c9 /rsvg-base.c
parentc72df0b0ab0cc5db48192535e9776efd6b46c51d (diff)
downloadlibrsvg-cf1c41c94f50b20fff4a29fc4ca5fca2bee2a18b.tar.gz
Obey the passed-in cancellable
Add GCancellable argument to _rsvg_io_acquire_*, and pass the cancellable passed to rsvg_handle_read_stream_sync() down.
Diffstat (limited to 'rsvg-base.c')
-rw-r--r--rsvg-base.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/rsvg-base.c b/rsvg-base.c
index 433061a9..b60433f5 100644
--- a/rsvg-base.c
+++ b/rsvg-base.c
@@ -1749,6 +1749,7 @@ rsvg_handle_read_stream_sync (RsvgHandle *handle,
int result;
xmlDocPtr doc;
GError *err = NULL;
+ gboolean res = FALSE;
g_return_val_if_fail (RSVG_IS_HANDLE (handle), FALSE);
g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
@@ -1758,6 +1759,7 @@ rsvg_handle_read_stream_sync (RsvgHandle *handle,
priv = handle->priv;
priv->error = &err;
+ priv->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
if (priv->ctxt == NULL) {
priv->ctxt = xmlCreatePushParserCtxt (&rsvgSAXHandlerStruct, handle, NULL, 0,
rsvg_handle_get_base_uri (handle));
@@ -1775,7 +1777,7 @@ rsvg_handle_read_stream_sync (RsvgHandle *handle,
if (xmlPushInput (priv->ctxt, input) < 0) {
rsvg_set_error (error, priv->ctxt);
xmlFreeInputStream (input);
- return FALSE;
+ goto out;
}
result = xmlParseDocument (priv->ctxt);
@@ -1785,14 +1787,12 @@ rsvg_handle_read_stream_sync (RsvgHandle *handle,
else
rsvg_set_error (error, handle->priv->ctxt);
- return FALSE;
+ goto out;
}
- priv->error = NULL;
-
if (err != NULL) {
g_propagate_error (error, err);
- return FALSE;
+ goto out;
}
doc = priv->ctxt->myDoc;
@@ -1804,7 +1804,14 @@ rsvg_handle_read_stream_sync (RsvgHandle *handle,
rsvg_defs_resolve_all (priv->defs);
priv->finished = TRUE;
- return TRUE;
+ res = TRUE;
+
+ out:
+
+ priv->error = NULL;
+ g_clear_object (&priv->cancellable);
+
+ return res;
}
/**
@@ -2153,7 +2160,12 @@ _rsvg_handle_acquire_data (RsvgHandle *handle,
if (!_rsvg_handle_allow_load (handle, uri, error))
return NULL;
- return _rsvg_io_acquire_data (uri, rsvg_handle_get_base_uri (handle), content_type, len, error);
+ return _rsvg_io_acquire_data (uri,
+ rsvg_handle_get_base_uri (handle),
+ content_type,
+ len,
+ handle->priv->cancellable,
+ error);
}
GInputStream *
@@ -2165,5 +2177,9 @@ _rsvg_handle_acquire_stream (RsvgHandle *handle,
if (!_rsvg_handle_allow_load (handle, uri, error))
return NULL;
- return _rsvg_io_acquire_stream (uri, rsvg_handle_get_base_uri (handle), content_type, error);
+ return _rsvg_io_acquire_stream (uri,
+ rsvg_handle_get_base_uri (handle),
+ content_type,
+ handle->priv->cancellable,
+ error);
}