Mon, 27 Jul 2020 00:20:24 -0500
Fix memory issues at shutdown
* Fix double-free of accounts menu widgets.
On shutdown, these are part of the menu, and are already destroyed, so
we can't destroy them again as part of finalize, which happens in the
hash table removal.
* Silence some warnings at shutdown.
If the IO operation is cancelled, then it doesn't need to be printed or
considered an error.
* Add config.h back to jabber.h.
This header checks config values (e.g., `HAVE_CYRUS_SASL`), so it should
include config, or else it falls to C sources to do it. And if they
don't, then they end up with incorrect struct offsets, which is causing
weird memory errors as stuff is put in the wrong place.
Testing Done:
valgrind with an xmpp account enabled.
Reviewed at https://reviews.imfreedom.org/r/51/
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
2 | * |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
3 | * purple |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
4 | * |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
5 | * Purple is the legal property of its developers, whose names are too numerous |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
6 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
7 | * source distribution. |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
8 | * |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
9 | * This program is free software; you can redistribute it and/or modify |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
10 | * it under the terms of the GNU General Public License as published by |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
11 | * the Free Software Foundation; either version 2 of the License, or |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
12 | * (at your option) any later version. |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
13 | * |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
14 | * This program is distributed in the hope that it will be useful, |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
17 | * GNU General Public License for more details. |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
18 | * |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
19 | * You should have received a copy of the GNU General Public License |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
20 | * along with this program; if not, write to the Free Software |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
22 | */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
23 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
24 | #include "internal.h" |
|
37962
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
25 | #include "proxy.h" |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
26 | #include "purple-gio.h" |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
27 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
28 | typedef struct { |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
29 | GIOStream *stream; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
30 | GInputStream *input; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
31 | GOutputStream *output; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
32 | } GracefulCloseData; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
33 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
34 | static gboolean |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
35 | graceful_close_cb(gpointer user_data) |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
36 | { |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
37 | GracefulCloseData *data = user_data; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
38 | GError *error = NULL; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
39 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
40 | if (g_input_stream_has_pending(data->input) || |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
41 | g_output_stream_has_pending(data->output)) { |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
42 | /* Has pending operations. Not ready to close yet. |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
43 | * Try again later. |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
44 | */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
45 | return G_SOURCE_CONTINUE; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
46 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
47 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
48 | /* Finally can gracefully close */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
49 | |
|
38137
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
50 | /* Close input stream, from wrapper or GIOStream */ |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
51 | if (!g_input_stream_close(data->input, NULL, &error)) { |
|
40498
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
52 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
53 | purple_debug_warning("gio", "Error closing input stream: %s", |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
54 | error->message); |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
55 | } |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
56 | g_clear_error(&error); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
57 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
58 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
59 | g_clear_object(&data->input); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
60 | |
|
38137
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
61 | /* Close output stream, from wrapper or GIOStream */ |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
62 | if (!g_output_stream_close(data->output, NULL, &error)) { |
|
40498
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
63 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
64 | purple_debug_warning("gio", "Error closing output stream: %s", |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
65 | error->message); |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
66 | } |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
67 | g_clear_error(&error); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
68 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
69 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
70 | g_clear_object(&data->output); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
71 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
72 | /* Close io stream */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
73 | if (!g_io_stream_close(data->stream, NULL, &error)) { |
|
40498
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
74 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
75 | purple_debug_warning("gio", "Error closing stream: %s", |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
76 | error->message); |
|
b119cf7a05b9
Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents:
40341
diff
changeset
|
77 | } |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
78 | g_clear_error(&error); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
79 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
80 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
81 | g_clear_object(&data->stream); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
82 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
83 | /* Clean up */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
84 | g_free(data); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
85 | return G_SOURCE_REMOVE; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
86 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
87 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
88 | void |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
89 | purple_gio_graceful_close(GIOStream *stream, |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
90 | GInputStream *input, GOutputStream *output) |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
91 | { |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
92 | GracefulCloseData *data; |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
93 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
94 | g_return_if_fail(G_IS_IO_STREAM(stream)); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
95 | g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input)); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
96 | g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output)); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
97 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
98 | data = g_new(GracefulCloseData, 1); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
99 | data->stream = g_object_ref(stream); |
|
38137
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
100 | |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
101 | if (input == NULL) |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
102 | input = g_io_stream_get_input_stream(stream); |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
103 | data->input = g_object_ref(input); |
|
38137
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
104 | |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
105 | if (output == NULL) |
|
6ea02c2ccb05
purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents:
37965
diff
changeset
|
106 | output = g_io_stream_get_output_stream(stream); |
|
37956
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
107 | data->output = g_object_ref(output); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
108 | |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
109 | /* Try gracefully closing the stream synchronously */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
110 | if (graceful_close_cb(data) == G_SOURCE_CONTINUE) { |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
111 | /* Has pending operations. Do so asynchronously */ |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
112 | g_idle_add(graceful_close_cb, data); |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
113 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
114 | } |
|
21cffc3446a0
purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff
changeset
|
115 | |
|
37962
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
116 | GSocketClient * |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
117 | purple_gio_socket_client_new(PurpleAccount *account, GError **error) |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
118 | { |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
119 | GProxyResolver *resolver; |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
120 | GSocketClient *client; |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
121 | |
|
37965
b67fb3fb5f85
proxy: Add GError argument to purple_proxy_get_proxy_resolver()
Mike Ruprecht <cmaiku@gmail.com>
parents:
37962
diff
changeset
|
122 | resolver = purple_proxy_get_proxy_resolver(account, error); |
|
37962
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
123 | |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
124 | if (resolver == NULL) { |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
125 | return NULL; |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
126 | } |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
127 | |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
128 | client = g_socket_client_new(); |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
129 | g_socket_client_set_proxy_resolver(client, resolver); |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
130 | g_object_unref(resolver); |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
131 | |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
132 | return client; |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
133 | } |
|
13e2a9fcbddd
purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents:
37956
diff
changeset
|
134 | |
|
40341
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
135 | guint16 |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
136 | purple_socket_listener_add_any_inet_port(GSocketListener *listener, |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
137 | GObject *source_object, GError **error) |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
138 | { |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
139 | GError *internal_error = NULL; |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
140 | guint16 port, start, end; |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
141 | |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
142 | if (!purple_prefs_get_bool("/purple/network/ports_range_use")) { |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
143 | return g_socket_listener_add_any_inet_port(listener, source_object, |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
144 | error); |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
145 | } |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
146 | |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
147 | start = purple_prefs_get_int("/purple/network/ports_range_start"); |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
148 | end = purple_prefs_get_int("/purple/network/ports_range_end"); |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
149 | for (port = start; port <= end; port++) { |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
150 | if (g_socket_listener_add_inet_port(listener, port, source_object, |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
151 | &internal_error)) { |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
152 | return port; |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
153 | } else if (port != end) { |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
154 | g_error_free(internal_error); |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
155 | } |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
156 | } |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
157 | |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
158 | g_propagate_error(error, internal_error); |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
159 | return 0; |
|
ae0175720477
Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39314
diff
changeset
|
160 | } |