libpurple/queuedoutputstream.c

Wed, 30 Aug 2017 20:33:01 -0300

author
dx <dx@dxzone.com.ar>
date
Wed, 30 Aug 2017 20:33:01 -0300
changeset 38648
9ff9acf9fa14
parent 38052
04b0e644919c
child 39165
62b8ef4dd1d3
permissions
-rw-r--r--

facebook: Fix "Failed to read thrift" with unknown fields in /t_p payload

>Login error: Failed to read thrift: facebook-api.c:1815
>fb_api_cb_publish_pt: assertion 'FALSE' failed

37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
1 /*
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
2 *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
3 * purple
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
4 *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
7 * source distribution.
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
8 *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
12 * (at your option) any later version.
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
13 *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
17 * GNU General Public License for more details.
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
18 *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
22 */
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
23
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
24 #include "internal.h"
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
25 #include "queuedoutputstream.h"
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
26
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
27 struct _PurpleQueuedOutputStreamPrivate {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
28 GAsyncQueue *queue;
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
29 GBytes *next;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
30 };
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
31
38052
04b0e644919c queuedoutputstream: parent_class should be static to avoid conflicts
Mike Ruprecht <cmaiku@gmail.com>
parents: 37978
diff changeset
32 static GObjectClass *parent_class = NULL;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
33
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
34 #define PURPLE_QUEUED_OUTPUT_STREAM_GET_PRIVATE(obj) \
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
35 (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
36 PURPLE_TYPE_QUEUED_OUTPUT_STREAM, \
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
37 PurpleQueuedOutputStreamPrivate))
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
38
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
39 G_DEFINE_TYPE_WITH_CODE(PurpleQueuedOutputStream, purple_queued_output_stream,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
40 G_TYPE_FILTER_OUTPUT_STREAM,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
41 G_ADD_PRIVATE(PurpleQueuedOutputStream))
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
42
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
43 static void purple_queued_output_stream_dispose(GObject *object);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
44 static gboolean purple_queued_output_stream_flush(GOutputStream *stream,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
45 GCancellable *cancellable, GError **error);
37978
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
46 static void purple_queued_output_stream_flush_async(GOutputStream *stream,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
47 int io_priority, GCancellable *cancellable,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
48 GAsyncReadyCallback callback, gpointer user_data);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
49 static gboolean purple_queued_output_stream_flush_finish(GOutputStream *stream,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
50 GAsyncResult *result, GError **error);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
51
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
52 static void purple_queued_output_stream_start_flush_async(GTask *task);
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
53
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
54 static void
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
55 purple_queued_output_stream_class_init(PurpleQueuedOutputStreamClass *klass)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
56 {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
57 GObjectClass *object_class;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
58 GOutputStreamClass *ostream_class;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
59
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
60 parent_class = g_type_class_peek_parent(klass);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
61
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
62 object_class = G_OBJECT_CLASS(klass);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
63 object_class->dispose = purple_queued_output_stream_dispose;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
64
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
65 ostream_class = G_OUTPUT_STREAM_CLASS(klass);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
66 ostream_class->flush = purple_queued_output_stream_flush;
37978
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
67 ostream_class->flush_async = purple_queued_output_stream_flush_async;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
68 ostream_class->flush_finish = purple_queued_output_stream_flush_finish;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
69 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
70
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
71 PurpleQueuedOutputStream *
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
72 purple_queued_output_stream_new(GOutputStream *base_stream)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
73 {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
74 PurpleQueuedOutputStream *stream;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
75
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
76 g_return_val_if_fail(G_IS_OUTPUT_STREAM(base_stream), NULL);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
77
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
78 stream = g_object_new(PURPLE_TYPE_QUEUED_OUTPUT_STREAM,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
79 "base-stream", base_stream,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
80 NULL);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
81
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
82 return stream;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
83 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
84
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
85 void
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
86 purple_queued_output_stream_push_bytes(PurpleQueuedOutputStream *stream,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
87 GBytes *bytes)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
88 {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
89 g_return_if_fail(PURPLE_QUEUED_OUTPUT_STREAM(stream));
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
90 g_return_if_fail(bytes != NULL);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
91
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
92 g_async_queue_push(stream->priv->queue, g_bytes_ref(bytes));
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
93 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
94
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
95 static void
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
96 purple_queued_output_stream_init(PurpleQueuedOutputStream *stream)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
97 {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
98 stream->priv = PURPLE_QUEUED_OUTPUT_STREAM_GET_PRIVATE(stream);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
99 stream->priv->queue =
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
100 g_async_queue_new_full((GDestroyNotify)g_bytes_unref);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
101 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
102
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
103 static void
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
104 purple_queued_output_stream_dispose(GObject *object)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
105 {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
106 PurpleQueuedOutputStream *stream = PURPLE_QUEUED_OUTPUT_STREAM(object);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
107
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
108 /* Chain up first in case the stream is flushed */
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
109 G_OBJECT_CLASS(parent_class)->dispose(object);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
110
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
111 g_clear_pointer(&stream->priv->queue, g_async_queue_unref);
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
112 g_clear_pointer(&stream->priv->next, g_bytes_unref);
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
113 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
114
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
115 static gboolean
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
116 purple_queued_output_stream_flush(GOutputStream *stream,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
117 GCancellable *cancellable, GError **error)
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
118 {
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
119 PurpleQueuedOutputStreamPrivate *priv;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
120 GOutputStream *base_stream;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
121 GBytes *bytes;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
122 const void *buffer;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
123 gsize count;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
124 gsize bytes_written = 0;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
125 gboolean ret = TRUE;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
126
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
127 priv = PURPLE_QUEUED_OUTPUT_STREAM(stream)->priv;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
128 base_stream = g_filter_output_stream_get_base_stream(
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
129 G_FILTER_OUTPUT_STREAM(stream));
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
130
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
131 do {
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
132 if (priv->next != NULL) {
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
133 bytes = priv->next;
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
134 priv->next = NULL;
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
135 } else {
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
136 bytes = g_async_queue_try_pop(priv->queue);
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
137 }
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
138
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
139 if (bytes == NULL) {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
140 break;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
141 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
142
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
143 buffer = g_bytes_get_data(bytes, &count);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
144
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
145 ret = g_output_stream_write_all(base_stream, buffer, count,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
146 &bytes_written, cancellable, error);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
147
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
148 if (!ret) {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
149 GBytes *queue_bytes;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
150
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
151 if (bytes_written > 0) {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
152 queue_bytes = g_bytes_new_from_bytes(bytes,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
153 bytes_written,
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
154 count - bytes_written);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
155 } else {
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
156 queue_bytes = g_bytes_ref(bytes);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
157 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
158
37975
18146230e402 queuedoutputstream: Remove usage of g_async_queue_push_front()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37665
diff changeset
159 priv->next = queue_bytes;
37665
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
160 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
161
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
162 g_bytes_unref(bytes);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
163 } while (ret);
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
164
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
165 return ret;
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
166 }
3eab84b9b88f libpurple: Add PurpleQueuedOutputStream for fire and forget output
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
167
37978
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
168 static void
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
169 purple_queued_output_stream_flush_async_cb(GObject *source,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
170 GAsyncResult *res, gpointer user_data)
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
171 {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
172 GTask *task = user_data;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
173 PurpleQueuedOutputStream *stream;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
174 gssize written;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
175 gsize size;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
176 GBytes *old_bytes;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
177 GError *error = NULL;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
178
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
179 written = g_output_stream_write_bytes_finish(G_OUTPUT_STREAM(source),
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
180 res, &error);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
181
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
182 if (written < 0) {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
183 g_task_return_error(task, error);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
184 return;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
185 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
186
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
187 stream = PURPLE_QUEUED_OUTPUT_STREAM(g_task_get_source_object(task));
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
188 size = g_bytes_get_size(stream->priv->next);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
189
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
190 old_bytes = stream->priv->next;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
191 stream->priv->next = NULL;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
192
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
193 if (size > (gsize)written) {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
194 stream->priv->next = g_bytes_new_from_bytes(old_bytes,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
195 written, size - written);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
196 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
197
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
198 g_bytes_unref(old_bytes);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
199
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
200 purple_queued_output_stream_start_flush_async(task);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
201 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
202
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
203 static void
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
204 purple_queued_output_stream_start_flush_async(GTask *task)
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
205 {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
206 PurpleQueuedOutputStream *stream;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
207 GOutputStream *base_stream;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
208
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
209 stream = PURPLE_QUEUED_OUTPUT_STREAM(g_task_get_source_object(task));
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
210 base_stream = g_filter_output_stream_get_base_stream(
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
211 G_FILTER_OUTPUT_STREAM(stream));
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
212
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
213 if (stream->priv->next == NULL) {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
214 stream->priv->next =
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
215 g_async_queue_try_pop(stream->priv->queue);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
216
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
217 if (stream->priv->next == NULL) {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
218 g_task_return_boolean(task, TRUE);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
219 return;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
220 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
221 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
222
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
223 g_output_stream_write_bytes_async(base_stream, stream->priv->next,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
224 g_task_get_priority(task),
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
225 g_task_get_cancellable(task),
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
226 purple_queued_output_stream_flush_async_cb, task);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
227 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
228
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
229 static void
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
230 purple_queued_output_stream_flush_async(GOutputStream *stream,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
231 int io_priority, GCancellable *cancellable,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
232 GAsyncReadyCallback callback, gpointer user_data)
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
233 {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
234 GTask *task;
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
235
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
236 task = g_task_new(stream, cancellable, callback, user_data);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
237 g_task_set_priority(task, io_priority);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
238
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
239 purple_queued_output_stream_start_flush_async(task);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
240 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
241
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
242 static gboolean
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
243 purple_queued_output_stream_flush_finish(GOutputStream *stream,
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
244 GAsyncResult *result, GError **error)
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
245 {
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
246 g_return_val_if_fail(g_task_is_valid(result, stream), FALSE);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
247
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
248 return g_task_propagate_boolean(G_TASK(result), error);
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
249 }
266009ac8af6 purplequeuedoutputstream: Implement unthreaded asynchronous flush
Mike Ruprecht <cmaiku@gmail.com>
parents: 37975
diff changeset
250

mercurial