Commit Graph

25443 Commits

Author SHA1 Message Date
Peter Bloomfield
8a43ae71c8 dataset: Document some logic
Add comments to clarify how the 'old' array is allocated and used.
2022-06-27 17:53:25 -04:00
Peter Bloomfield
8bd63258a5 dataset: Improve readability
Improve the readability by using a temporary variable
2022-06-27 17:42:11 -04:00
Peter Bloomfield
e95a6bdd7d glib/tests/dataset: Use existing code
`destroy_index` duplicates `destroy_count`, and `foreach_func()`
essentially duplicates `notify()`.
2022-06-23 21:08:41 -04:00
Peter Bloomfield
a437a97ffd dataset: Rename i as destroy_index and move it out of destroy_func(), so that it can be checked to confirm that destroy_func() was called three times. 2022-06-23 22:17:13 +00:00
Peter Bloomfield
42826576a8 glib/tests/dataset: Test id_remove_multiple
Test that destroy-funcs are called in the order that the keys are
specified, not the order that they are found in the datalist.

Helps https://gitlab.gnome.org/GNOME/glib/-/issues/2672
2022-06-23 17:41:55 -04:00
Peter Bloomfield
a4fa456e67 gdataset: Preserve destruction order
In `g_data_remove_internal()`, call the `GDataElt:destroy` functions in the
order that they appear in `keys`, instead of the order that they are found in
`datalist`.

Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2672
2022-06-23 17:41:55 -04:00
Peter Bloomfield
ac113c1ed2 In test_datalist_id_remove_multiple(), verify that the data list contains 3 items before calling g_datalist_id_remove_multiple(). 2022-06-23 17:41:55 -04:00
Peter Bloomfield
ad0f7199f1 glib/tests/dataset: Add a test
Test that `g_datalist_id_remove_multiple()` removes all the keys it is given.

Helps https://gitlab.gnome.org/GNOME/glib/-/issues/2672
2022-06-23 17:41:55 -04:00
Peter Bloomfield
8c4598aab3 dataset: Do not increment
Do not increment the `data` pointer when it points to an item that has
not been inspected.

Helps https://gitlab.gnome.org/GNOME/glib/-/issues/2672
2022-06-23 17:41:55 -04:00
Philip Withnall
ebfbef1acd 2.73.1
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-06-21 14:02:39 +01:00
Philip Withnall
f805635e11 Merge branch 'coverity-signal-emissions' into 'main'
gsignal: Change signal instance ref semantics under static analysis

See merge request GNOME/glib!2762
2022-06-21 12:54:41 +00:00
Philip Withnall
95d548ab03 gsignal: Change signal instance ref semantics under static analysis
As with commit 0932f71460, which did this for refs/unrefs of the
object in `g_object_notify()`, we need to do a similar thing for
refs/unrefs of the instance with `g_signal_emit()`, for all the same
reasons.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-06-21 13:27:52 +01:00
Emmanuele Bassi
55a5a82655 Merge branch 'tls-certificate-refs' into 'main'
gtlscertificate: Hold a ref on the root certificate when building chains

See merge request GNOME/glib!2761
2022-06-21 12:09:22 +00:00
Emmanuele Bassi
be7d824053 Merge branch '2672-accel-group-crash' into 'main'
gobject: Fix crash when disposing a GtkAccelGroup

See merge request GNOME/glib!2756
2022-06-21 12:03:02 +00:00
Philip Withnall
12ed2aa982 Merge branch 'fix-once-memcheck-test' into 'main'
tests: Reduce number of threads in once test under valgrind

See merge request GNOME/glib!2729
2022-06-21 11:36:50 +00:00
Philip Withnall
2c75c392eb gtlscertificate: Hold a ref on the root certificate when building chains
This is unlikely to be a bug in practice, as the certificate pointed to
by `root` should have a ref held on it as the issuer of another
certificate in the chain.

However, we can’t guarantee that’s how the `GTlsCertificate`
implementation behaves, so keep a temporary ref on `root` until it’s no
longer needed.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Coverity CID: #1489985
2022-06-21 12:11:27 +01:00
Philip Withnall
fb377b70d0 Merge branch 'gio-dont-include-gtrace' into 'main'
gio: Don't bundle gtrace in static builds

See merge request GNOME/glib!2758
2022-06-21 09:56:18 +00:00
Olivier Crête
1cc685abc4 gio: Don't bundle gtrace in static builds
They're already in the libglib.a file and it prevents the build
from completing.
2022-06-20 16:09:51 -04:00
Philip Withnall
9a2bedb22c Merge branch 'update-codeowners' into 'main'
docs: Add Marco Trevisan as a co-maintainer

See merge request GNOME/glib!2754
2022-06-20 16:03:07 +00:00
Philip Withnall
9cc2859e08 docs: Add Marco Trevisan as a co-maintainer 2022-06-20 16:03:01 +00:00
Philip Withnall
01ac1d902f gobject: Fix crash when disposing a GtkAccelGroup
This is a partial revert of commit fa8c7c0da using the approach
suggested (and tested) by Kjell Ahlstedt.

It is intended to be temporary pending a proper dig into what’s causing
the regression, just so we can get the 2.73.1 release out.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Helps: #2672
2022-06-20 16:32:00 +01:00
Philip Withnall
150a63e6b5 Merge branch 'iss2655' into 'main'
gdatetime: Pad numbers with numeric space

Closes #2655

See merge request GNOME/glib!2698
2022-06-20 14:03:57 +00:00
Maksym Hazevych
7169f6e1e5 gdatetime: Use figure space for %e
Helps: #2655
2022-06-20 14:46:23 +01:00
Maksym Hazevych
7074122f30 gdatetime: Pad numbers with numeric space
Padding numbers with a typical space character doesn't align them well
because it has a different size. Instead, we need to use the "U+2007"
figure (numeric) space that has the same size as a numerical digit.
This is only visible when using the `tnum` font feature that
makes numbers monospace.

Closes #2655
2022-06-20 14:28:09 +01:00
Philip Withnall
f1916032e4 tests: Add tests for modifiers for GDateTime’s %l placeholder
They were missing.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Helps: #2655
2022-06-20 14:27:06 +01:00
Philip Withnall
4101770274 Merge branch 'mcatanzaro/xdgmime-corruption' into 'main'
xdgmime: fix double free

See merge request GNOME/glib!2753
2022-06-20 12:48:30 +00:00
Philip Withnall
46a6f49066 Merge branch 'meson-add-test-setup' into 'main'
build: Use add_test_setup() to allow tests to be run under valgrind

See merge request GNOME/glib!2752
2022-06-20 11:09:55 +00:00
Philip Withnall
f5baecdb36 build: Use add_test_setup() to allow tests to be run under valgrind
This means we can specify the standard options for testing GLib under
valgrind consistently, so that developers can use `meson test
--setup=valgrind` to run them.

Port the existing valgrind CI to use them (this will not change its
functional behaviour).

Suggested by Marco Trevisan at
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2717#note_1478891.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-06-20 11:54:10 +01:00
Philip Withnall
b2f4df95e8 Merge branch 'coverity-is-stupid' into 'main'
gobject: Change GObject notify semantics under static analysis

See merge request GNOME/glib!2747
2022-06-17 15:47:39 +00:00
Michael Catanzaro
f95ca6cb71 xdgmime: fix double free
We free xdg_dirs[i] twice, but fail to free xdg_dirs itself.

Also, since free() is NULL-safe, there is no need for the second check
here.

Discovered in: https://gitlab.freedesktop.org/xdg/xdgmime/-/merge_requests/16#note_1432025
2022-06-17 08:49:03 -05:00
Philip Withnall
4a8120ec22 Merge branch 'meson-dependency-lookups' into 'main'
meson: simplify iconv/intl lookups using Meson's builtin dependency lookup

See merge request GNOME/glib!2734
2022-06-17 10:36:29 +00:00
Eli Schwartz
1532c5878e
NEWS: add stub entry for iconv option deprecation
As per review comment, this is miscellaneous enough that it could be
forgotten about at release time, but should still be mentioned.
Guarantee it by starting work on that now.
2022-06-16 12:07:03 -04:00
Eli Schwartz
26435b570f
meson: simplify intl lookups using Meson's builtin dependency lookup
intl is complicated to look up. Some of that complexity now resides in
Meson, since 0.59.0, via a `dependency('intl')` lookup, so use that
instead.

The Meson lookup doesn't include all the checks here, but likewise this
meson.build doesn't include all the checks in Meson. Particularly, the
following are different:

- Meson accurately detects support built into libc, even if that
  conflicts with an external library version (which should be detected as
  broken and thus not-found, but glib does not do so).

  The problem here is that depending on which libintl.h header is first
  in the search path, the *gettext symbols may be the libc ABI, or they
  may be renamed to libintl_*gettext, then additionally take over the
  *gettext names via a macro, in order to invoke the external library
  version even on systems where there is a libc builtin. This means that
  checking for `cc.has_function()` correctly reports that there is such
  a function in libc, but that unfortunately does not mean it is usable,
  because source code referencing `ngettext` etc. will expect to be
  linked to `libintl_ngettext`.

- glib checks whether the found intl requires pthread, rather than
  simply trusting the result of `cc.find_library()` for the external
  library case.

Do the heavy lifting by using Meson to check for intl, and select the
correct implementation, but do a post-discovery check if the symbol is
linkable both with/without pthread.

The logic is still a bit hairy, and eventually more of the logic could
be moved into Meson. But it's better than before.

Fixes incorrect detection of intl on musl-based systems (which have a
less capable libc intl), when GNU libintl is installed as an external
library.
2022-06-16 12:04:59 -04:00
Eli Schwartz
24ec80cfb4
meson: simplify iconv lookups using Meson's builtin dependency lookup
iconv is complicated to look up. That complexity now resides in
Meson, since 0.60.0, via a `dependency('iconv')` lookup, so use that
instead.

No effort is made to support the old option for which type of iconv to
use. It was a false choice, because if only one was available, then
that's the only one you can use, and if both are available, the external
iconv shadows the builtin one and renders the builtin one unusable,
so there is still only one you can use.

This meant that when configuring glib with -Diconv=libc on systems that
had an external iconv, the configure check would detect a valid libc
iconv, try to use it, and then fail during the build because iconv.h
belongs to the external iconv and generates machine code using the
external iconv ABI, but fails to link to the iconv `find_library()`.
Meson handles this transparently.
2022-06-16 12:04:59 -04:00
Philip Withnall
ccc7006d53 Merge branch 'fix-unix-open-pipes-introspection' into 'main'
glib-unix: Mark GLib.unix_open_pipe fds input array as fixed-size

See merge request GNOME/glib!2751
2022-06-16 11:17:28 +00:00
Philip Withnall
594a70bf5f Merge branch 'gvdb-as-wrap' into 'main'
build: Move gvdb to a subproject

See merge request GNOME/glib!2733
2022-06-16 09:29:43 +00:00
Philip Withnall
b3f49d08a6 build: Move gvdb to a subproject
Rather than carrying the copylib around inside GLib, which is a pain to
synchronise and affects our code coverage statistics.

This requires updating the CI images to cache the new subproject,
including updating the `cache-subprojects.sh` script to pull in git
submodules.

It also requires adding `gioenumtypes_dep` to be added to the
dependencies list of `libgio`, since it needs to be build before GVDB as
it’s pulled in by the GIO headers which GVDB includes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Helps: #2603
2022-06-16 10:12:07 +01:00
Marco Trevisan (Treviño)
3a197d7500 glib-unix: Mark GLib.unix_open_pipe fds input array as fixed-size 2022-06-15 21:46:51 +02:00
Philip Withnall
9274a04cf1 Merge branch '2670-socket-client-cancellable-leak' into 'main'
gsocketclient: Fix still-reachable references to cancellables

Closes #2670

See merge request GNOME/glib!2745
2022-06-14 14:12:51 +00:00
Philip Withnall
2e1218ebe1 Merge branch 'freeze-shenanigans' into 'main'
Fix problems with notify-in-instance-init and add unit tests

Closes #2665

See merge request GNOME/glib!2737
2022-06-14 10:32:21 +00:00
Philip Withnall
0932f71460 gobject: Change GObject notify semantics under static analysis
Coverity notices the `g_object_unref()` call in `g_object_notify()`, but
not the paired `g_object_ref()` call. It therefore incorrectly assumes
that every call to `g_object_notify()` frees the object. This causes a
lot (hundreds) of false positive reports about double-frees or
use-after-frees.

I can’t find a way to fix this using a model file, so the other options
are:
 * Manually mark every report as a false positive and keep updating them
   as the code changes over time. This would take a lot of maintainer
   effort.
 * Comment out the `g_object_ref()`/`g_object_unref()` calls when
   running static analysis (but not in a normal production build). This
   is ugly, but cheap and shouldn’t impact maintainability much.

So this commit implements option 2.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-06-14 11:25:50 +01:00
Philip Withnall
56d371942e gsocketclient: Fix still-reachable references to cancellables
`GSocketClient` chains its internal `GCancellable` objects to ones
provided by the caller in two places using `g_cancellable_connect()`.
However, it never calls `g_cancellable_disconnect()`, instead relying
(incorrectly) on the `GCancellable` provided by the caller being
short-lived.

In the (valid) situation where a caller reuses one `GCancellable` for
multiple socket client calls, or for calls across multiple socket
clients, this will cause the internal `GCancellable` objects from those
`GSocketClient`s to accumulate, with one reference left each (which is
the reference from the `g_cancellable_connect()` closure).

These `GCancellable` instances aren’t technically leaked, as they will
all be freed when the caller’s `GCancellable` is disposed, but they are
no longer useful and there is no bound on the number of them which will
hang around.

For a program doing a lot of socket operations, this still-reachable
memory usage can become significant.

Fix the problem by adding paired `g_cancellable_disconnect()` calls.
It’s not possible to add a unit test as we can’t measure still-reachable
memory growth before the end of a unit test when everything has to be
freed.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #2670
2022-06-14 11:15:18 +01:00
Philip Withnall
af7ba68a00 gobject: ifdef out some inline functions if they’re not used
This prevents `-Wunused-function` warnings on platforms which don’t have
`HAVE_OPTIONAL_FLAGS` defined.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-06-14 11:10:09 +01:00
Matthias Clasen
10a1c16b59 Avoid atomics during construction
During construction, we have exclusive access to
the object, so there is no need to use atomics
for setting or reading the optional_flags member.
2022-06-14 11:09:53 +01:00
Matthias Clasen
b92f1fcbc5 Handle notify freezing with custom constructors
g_object_new_with_custom_constructor needs to handle
freezing notifications in the same way as
g_object_new_internal.

Fixing a bug pointed out by Christian Hergert.
2022-06-12 12:01:25 -04:00
Matthias Clasen
dccab10d9f Add another testcase
This is similar to the notify-in-init testcase
added recently, but with a custom constructor.
2022-06-12 12:01:16 -04:00
Matthias Clasen
58ab960a87 Handle a corner-case of notify avoidance
The corner-case we are handling here is that
we don't freeze the notify queue in g_object_init
(because there's no custom ->notify vfunc, but
then we gain a notify handler during instance
init, and instance init also triggers a
notification. Handle this by jit freezing
notification in g_object_notify_by_spec_internal.

Note that this is bad code - instance init really
shouldn't be doing things like this.

Testcase included.

Fixes: #2665
2022-06-12 12:01:08 -04:00
Matthias Clasen
9444ace2c8 Unconditionally mark objects as in-construction
This will be used for things other than
custom constructors in the following commits.
2022-06-12 12:01:08 -04:00
Matthias Clasen
fb380b9899 Add a testcase for notify-in-instance-init
This is reproducing a problem that was observed
in gtk3's gtk_check_button_init.
2022-06-12 12:01:08 -04:00
Philip Withnall
6b65b721e7 Merge branch 'timeloop-closure_test' into 'main'
Delete tests/gobject/timeloop-closure.c

See merge request GNOME/glib!2697
2022-06-10 14:13:05 +00:00