diff options
author | Benjamin Otte <otte@gnome.org> | 2009-07-05 21:34:39 +0200 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2009-07-05 21:36:03 +0200 |
commit | c85ff0c75004736d5c8798e3b47a47e0fc67ac70 (patch) | |
tree | 35cb635126131302c8eb44846a5a531c57c8bdac /gio | |
parent | 8a2e617e41e3f605ea0206832f0c2f346bfe008e (diff) |
[gio] minor improvements to g_cancellable_cancel()
- make this function not crash when cancellable is NULL
- avoid locking when the cancellable has already been cancelled
Diffstat (limited to 'gio')
-rw-r--r-- | gio/gcancellable.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/gio/gcancellable.c b/gio/gcancellable.c index 888032d62..8654883ae 100644 --- a/gio/gcancellable.c +++ b/gio/gcancellable.c @@ -514,27 +514,27 @@ g_cancellable_make_pollfd (GCancellable *cancellable, GPollFD *pollfd) void g_cancellable_cancel (GCancellable *cancellable) { + static const char ch = 'x'; gboolean cancel; GCancellablePrivate *priv; + if (cancellable == NULL || + priv->cancelled) + return; + priv = cancellable->priv; cancel = FALSE; G_LOCK(cancellable); - if (cancellable != NULL && - !priv->cancelled) - { - char ch = 'x'; - cancel = TRUE; - priv->cancelled = TRUE; - priv->cancelled_running = TRUE; + cancel = TRUE; + priv->cancelled = TRUE; + priv->cancelled_running = TRUE; #ifdef G_OS_WIN32 - if (priv->event) - SetEvent(priv->event); + if (priv->event) + SetEvent(priv->event); #endif - if (priv->cancel_pipe[1] != -1) - write (priv->cancel_pipe[1], &ch, 1); - } + if (priv->cancel_pipe[1] != -1) + write (priv->cancel_pipe[1], &ch, 1); G_UNLOCK(cancellable); if (cancel) |