31319 Commits

Author SHA1 Message Date
Philip Withnall
4738951270 Merge branch 'gbsneto/fix-gsubprocess-pid' into 'main'
gio/subprocess: Initialize pid variable to 0

See merge request GNOME/glib!4494
2025-02-15 10:12:02 +00:00
Georges Basile Stavracas Neto
14909ffe1e
gio/subprocess: Initialize pid variable to 0
The documentation for g_spawn_async_with_pipes_and_fds() states:

> If an error occurs, child_pid, stdin_pipe_out, stdout_pipe_out, and
> stderr_pipe_out will not be filled with valid values.

Before 2dc3a6f0c80e5a8f786369eee0c45bfe19b55f4f, the `child_pid`
argument was `self->pid`, and GObject zero-initializes structs. So
the pid field was properly initialized to zero.

After 2dc3a6f0c80e5a8f786369eee0c45bfe19b55f4f, however, the out
variable is now declared inside initable_init(), and it's unitialized.
So if g_spawn_async_with_pipes_and_fds() errors out, `pid` will have
trash value in it, and the following assertion will fail:

```
g_assert (success == (pid != 0));
```

Fix that by initializing the `pid` variable to zero. Add a test to
exercise the fail code path, and prevent errors like this in the
future.
2025-02-14 21:20:24 -03:00
Philip Withnall
c5d82f9099 Merge branch 'keyfile-docs' into 'main'
gkeyfile: Convert docs to gi-docgen linking syntax

See merge request GNOME/glib!4472
2025-02-14 00:56:06 +00:00
Philip Withnall
985cc08d43 Merge branch 'wip/3v1n0/gsubprocess-races-fix' into 'main'
gio/subprocess: Lock while writing on shared pid and status values

See merge request GNOME/glib!4490
2025-02-13 22:17:48 +00:00
Marco Trevisan
2dc3a6f0c8 gio/subprocess: Lock while writing on shared pid and status values
The process PID is initialized by the initable vfunc, while
g_subprocess_exited sets it again, when we're protecting it via a lock.
The status is set when the process exits instead, again while locking.

This makes the thread sanitizer unhappy (even if it shouldn't really be
a race for the PID init case), but still locking during initialization is
not a bad thing to do.

At the same time g_subprocess_wait() and friends were using the pid and status
values without any protection, so let's ensure this is not the case anymore.

WARNING: ThreadSanitizer: data race (pid=8213)
  Write of size 4 at 0x7b200000084c by thread T1:
    #0 g_subprocess_exited ../gio/gsubprocess.c:284
    #1 g_child_watch_dispatch ../glib/gmain.c:5963
    #2 g_main_dispatch ../glib/gmain.c:3373
    #3 g_main_context_dispatch_unlocked ../glib/gmain.c:4224
    #4 g_main_context_iterate_unlocked ../glib/gmain.c:4289
    #5 g_main_context_iteration ../glib/gmain.c:4354
    #6 glib_worker_main ../glib/gmain.c:6553
    #7 g_thread_proxy ../glib/gthread.c:892
  Previous read of size 4 at 0x7b200000084c by main thread:
    #0 g_subprocess_wait ../gio/gsubprocess.c:908
    #1 g_subprocess_wait_check ../gio/gsubprocess.c:939
    #2 end_element ../gio/glib-compile-resources.c:342
    #3 emit_end_element ../glib/gmarkup.c:1045
    #4 g_markup_parse_context_parse ../glib/gmarkup.c:1603
    #5 parse_resource_file ../gio/glib-compile-resources.c:578
    #6 main ../gio/glib-compile-resources.c:967
  Location is heap block of size 120 at 0x7b2000000800 allocated by main
  thread:
    #0 calloc <null>
    #1 g_malloc0 ../glib/gmem.c:133
    #2 g_type_create_instance ../gobject/gtype.c:1933
    #3 g_object_new_internal ../gobject/gobject.c:2621
    #4 g_object_new_valist ../gobject/gobject.c:2960
    #5 g_initable_new_valist ../gio/ginitable.c:245
    #6 g_initable_new ../gio/ginitable.c:163
    #7 g_subprocess_newv ../gio/gsubprocess.c:619
    #8 g_subprocess_new ../gio/gsubprocess.c:590
    #9 end_element ../gio/glib-compile-resources.c:334
    #10 emit_end_element ../glib/gmarkup.c:1045
    #11 g_markup_parse_context_parse ../glib/gmarkup.c:1603
    #12 parse_resource_file ../gio/glib-compile-resources.c:578
    #13 main ../gio/glib-compile-resources.c:967
  Thread T1 'gmain' (tid=8228, running) created by main thread at:
    #0 pthread_create <null>
    #1 g_system_thread_new ../glib/gthread-posix.c:762
    #2 g_thread_new_internal ../glib/gthread.c:996
    #3 g_thread_new ../glib/gthread.c:949
    #4 g_get_worker_context ../glib/gmain.c:6580
    #5 initable_init ../gio/gsubprocess.c:443
    #6 g_initable_init ../gio/ginitable.c:129
    #7 g_initable_new_valist ../gio/ginitable.c:249
    #8 g_initable_new ../gio/ginitable.c:163
    #9 g_subprocess_newv ../gio/gsubprocess.c:619
    #10 g_subprocess_new ../gio/gsubprocess.c:590
    #11 end_element ../gio/glib-compile-resources.c:334
    #12 emit_end_element ../glib/gmarkup.c:1045
    #13 g_markup_parse_context_parse ../glib/gmarkup.c:1603
    #14 parse_resource_file ../gio/glib-compile-resources.c:578
    #15 main ../gio/glib-compile-resources.c:967
SUMMARY: ThreadSanitizer: data race ../gio/gsubprocess.c:284 in
g_subprocess_exited

======================================

WARNING: ThreadSanitizer: data race (pid=15959)
  Read of size 4 at 0x7b200000084c by main thread:
    #0 g_subprocess_wait ../gio/gsubprocess.c:913
    #1 g_subprocess_wait_check ../gio/gsubprocess.c:944
    #2 test_cat_utf8 ../gio/tests/gsubprocess.c:489
    #3 test_case_run ../glib/gtestutils.c:3115
    #4 g_test_run_suite_internal ../glib/gtestutils.c:3210
    #5 g_test_run_suite_internal ../glib/gtestutils.c:3229
    #6 g_test_run_suite ../glib/gtestutils.c:3310
    #7 g_test_run ../glib/gtestutils.c:2379
    #8 main ../gio/tests/gsubprocess.c:2266

  Previous write of size 4 at 0x7b200000084c by thread T1:
    #0 g_subprocess_exited ../gio/gsubprocess.c:284
    #1 g_child_watch_dispatch ../glib/gmain.c:5963
    #2 g_main_dispatch ../glib/gmain.c:3373
    #3 g_main_context_dispatch_unlocked ../glib/gmain.c:4224
    #4 g_main_context_iterate_unlocked ../glib/gmain.c:4289
    #5 g_main_context_iteration ../glib/gmain.c:4354
    #6 glib_worker_main ../glib/gmain.c:6553
    #7 g_thread_proxy ../glib/gthread.c:892
2025-02-13 22:17:48 +00:00
Marco Trevisan
a3d3e3b96e Merge branch 'file-monitor-props-cleanups' into 'main'
gfilemonitor: Various cleanups and minor fixes to property handling

See merge request GNOME/glib!4492
2025-02-13 19:22:44 +00:00
Philip Withnall
f2878327f4
gfilemonitor: Fix value of GFileMonitor:cancelled via g_object_get_property()
It was hard-coded to return `FALSE` for some reason. Fix that.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-13 18:58:30 +00:00
Philip Withnall
06077435c9
gfilemonitor: Emit GObject::notify by pspec rather than property name
This is equivalent, but slightly faster, as it avoids a pspec lookup.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-13 18:57:58 +00:00
Philip Withnall
8ffdbb55d9
gfilemonitor: Install properties all at once
This is a minor performance improvement, since the pspec list for the
class now only has to be modified once, rather than twice.

It also means we now have the `GParamSpec` pointers to hand in a `props`
array, which will be used in the upcoming commits.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-13 18:57:04 +00:00
Philip Withnall
5aa42683ee
gfilemonitor: Use an enum for properties to allow -Wswitch-enum
This lets the compiler tell us if we’ve accidentally missed a property
implementation from `get_property()` or `set_property()`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-13 18:56:04 +00:00
Philip Withnall
40fd0e4759 Merge branch 'wip/3v1n0/gfilemonitor-atomic-cancelled' into 'main'
gio/gfilemonitor: Use atomic API to get / store cancelled state

See merge request GNOME/glib!4487
2025-02-13 18:43:50 +00:00
Philip Withnall
2fab2c38ff Merge branch 'rafaelff/update-pt_BR' into 'main'
Update Brazilian Portuguese translation

See merge request GNOME/glib!4491
2025-02-13 18:39:36 +00:00
Rafael Fontenelle
2e928adfd1 Update Brazilian Portuguese translation 2025-02-13 16:43:55 +00:00
Marco Trevisan (Treviño)
795a56d623 gio/gfilemonitor: Reorder includes as expected by syntax checker 2025-02-13 15:03:57 +01:00
Marco Trevisan (Treviño)
175e02f15c gio/gfilemonitor: Do not mark the filemonitor cancelled until vfunc is done
As per previous commit we used atomic logic to handle the cancellation,
but that lead to a slightly different behavior because the file monitor
was then marked as cancelled before the vfunc implementation was called.

Use similar behavior now (by still relying on the atomic logic), by
marking the state as about-to-cancel as soon as we're starting the
cancellation (preventing other threads to cancel it), and eventually
fully marking it as cancelled.
2025-02-13 15:03:57 +01:00
Marco Trevisan (Treviño)
218b298a1b gio/gfilemonitor: Use atomic API to get / store cancelled state
The cancelled state may be set and read by different threads, so ensure
that it's stored and managed in an atomic way.

We could in fact end up check for `g_file_monitor_is_cancelled()` in a
thread and `g_file_monitor_cancel()` or `g_file_monitor_emit_event` in
in another one.
2025-02-13 15:03:57 +01:00
Philip Withnall
3c03076ac5 Merge branch 'unify-tests-launcher-scripts' into 'main'
tests: Cleanup python tests and add tests for gi-compile-repository and gi-inspect-typelib

See merge request GNOME/glib!4476
2025-02-12 17:00:15 +00:00
Marco Trevisan (Treviño)
fe25e4aad5 tests/lib/testprogramrunner: Support overriding the environment 2025-02-12 17:37:25 +01:00
Marco Trevisan (Treviño)
044e77a384 girepository/tests: Add tests for basic inspector operations
Add some initial tests for the inspector
2025-02-12 17:37:25 +01:00
Philip Withnall
23948a4db5
gkeyfile: Convert docs to gi-docgen linking syntax
Improve formatting while I’m there, and try and ensure all the docs in
these two files matches the
[guidelines](https://developer.gnome.org/documentation/guidelines/devel-docs.html#writing-api-references).

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

Helps: #3250
2025-02-12 11:34:20 +00:00
Philip Withnall
7ca70303b7
gkeyfile: Add missing (transfer full) annotations to ref/free functions
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-12 11:31:10 +00:00
Philip Withnall
9c5409e229
gkeyfile: Update links to various fdo specifications
The old links still work, but we might as well avoid a redirect.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-12 11:31:03 +00:00
Philip Withnall
3e5c454a02
gkeyfilesettingsbackend: Convert docs to gi-docgen linking syntax
Improve formatting while I’m there, and try and ensure all the docs in
these two files matches the
[guidelines](https://developer.gnome.org/documentation/guidelines/devel-docs.html#writing-api-references).

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

Helps: #3250
2025-02-12 11:30:55 +00:00
Marco Trevisan (Treviño)
6160747fe5 girepository/tests: Add tests for the compiler basic operations
Adding some initial test for the compiler behavior and its expected
output.

Also, when using sanitizers we want to be able to test the compiler memory
management.
2025-02-11 21:02:56 +01:00
Marco Trevisan (Treviño)
bf9ea337a2 girepository/tests: Add tests on compiler open/write failures 2025-02-11 21:02:56 +01:00
Marco Trevisan (Treviño)
26890fbb82 ci: Enable introspection for installed tests 2025-02-11 18:51:15 +01:00
Marco Trevisan (Treviño)
00ebf4e1eb tests/lib: Add a new unittest type to simplify launching test programs
We were reusing the same logic everywhere, while we can just reuse an
unique class to base our tests on that avoids having to copy-and-paste
code for no good reason
2025-02-11 18:51:15 +01:00
Marco Trevisan (Treviño)
4bcd99de43 tests: Avoid reusing and installing multiple files the taptestrunner
Add some basic support for having glib-tests-only python libraries that
can be shared across the various projects, so that we don't have to
maintain multiple copies of them.
2025-02-11 18:51:15 +01:00
Marco Trevisan
15edb1b07e Merge branch 'typo' into 'main'
meson: Fix typo in comment about python shebang

See merge request GNOME/glib!4486
2025-02-11 17:09:57 +00:00
Nirbheek Chauhan
8d07ae7ef1 meson: Fix typo in comment about python shebang 2025-02-11 21:37:49 +05:30
Marco Trevisan
589c8295ea Merge branch 'callable-info-test-leak' into 'main'
tests: Fix a memory leak if a callable-info test is skipped

See merge request GNOME/glib!4483
2025-02-11 13:57:20 +00:00
Philip Withnall
ca760eeeac Merge branch 'windows-fix-shebang' into 'main'
Windows: fix Python path can contain spaces

Closes #3331

See merge request GNOME/glib!4391
2025-02-11 13:42:32 +00:00
Dan Yeaw
160e55575e Windows: fix Python path cannot contain spaces
Move the shebang line from the full Python path of the build
machine to the first Python on the path during runtime. Set
the shebang in the main meson.build file so that it can be
overridden in one place if needed.

Fixes: #3331
2025-02-11 11:57:30 +00:00
Philip Withnall
a127f9b7d2
tests: Fix a memory leak if a callable-info test is skipped
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-11 11:40:29 +00:00
Philip Withnall
8d51095602 Merge branch 'gkeyfile-fix-c-locale-handling' into 'main'
gkeyfile: Fix C locale handling

Closes #3578

See merge request GNOME/glib!4480
2025-02-11 09:31:33 +00:00
Gaël Bonithon
5cc6af2237 gkeyfile: Fix C locale handling
As gettext does:
* if C locale is used to set a value, set the untranslated value, i.e.
  key=value and not key[C]=value;
* if C locale is used to get a value, return the untranslated value,
  i.e. not the value from key[C]=value, if it ever exists, and do not
  consider C as an undefined locale otherwise.

Fixes: #3578
2025-02-11 09:31:33 +00:00
Philip Withnall
ba60ea7aa0 Merge branch 'amolenaar/docs-fixes' into 'main'
docs: Make docs more markdown-ish

See merge request GNOME/glib!4479
2025-02-10 14:40:55 +00:00
Arjan Molenaar
04acc1741b
docs: Make docs more markdown-ish
Fixed some issues that came to light while compiling documentation
for the python bindings.
2025-02-10 10:26:42 +01:00
Philip Withnall
0234f8e1b1 Merge branch 'ppd-api-rename' into 'main'
gio/powerprofilemonitordbus: Use newer D-Bus API

See merge request GNOME/glib!4478
2025-02-07 08:34:19 +00:00
Marco Trevisan (Treviño)
dba2d618d5 gio/tests/power-profile-monitor*.py: Use upower ppd daemon APIs 2025-02-07 00:55:35 +01:00
Marco Trevisan (Treviño)
71d08b707a gio/tests/power-profile-monitor-*.py: Fix style using black 2025-02-07 00:55:35 +01:00
Marco Trevisan (Treviño)
236abac6fb gio/powerprofilemonitordbus: Use newer DBus API
Since some time the power-profiles-daemon project has been moved under
the upower umbrella and renamed its API to follow that.

While the legacy name is still supported, there are plans to not support
it anymore in future [2]. So let's update GLib code to use the
current main name instead.

[1] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/148
[2] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/166
2025-02-07 00:55:32 +01:00
Philip Withnall
00f54b1bcc Merge branch 'fix-docs-links' into 'main'
docs: Fix invalid references and broken links

See merge request GNOME/glib!4475
2025-02-06 12:38:51 +00:00
Mavroudis Chatzilazaridis
cb1502ed66 docs: Fix invalid references and broken links
This commit fixes quite a few broken links and references, minor typos,
and improves wording in some sections.
2025-02-05 22:28:26 +02:00
Michael Catanzaro
f5eb3fd716 Merge branch 'sysprof-leak' into 'main'
glib.supp: Ignore once-per-thread leak from SysprofCollector

See merge request GNOME/glib!4471
2025-02-05 17:33:40 +00:00
Philip Withnall
7fffe59037 Merge branch 'wip/pwithnall/soft-c11-dependency' into 'main'
build: Add a soft dependency on C11

See merge request GNOME/glib!4473
2025-02-04 16:35:33 +00:00
Philip Withnall
0445d555e0
docs: Stop mentioning outdated C versions in various docs
Link to the toolchain requirements, which are kept up to date, rather
than duplicating them across multiple documents.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-04 16:01:44 +00:00
Philip Withnall
445eea668a
build: Add a soft dependency on C11
This will warn if GLib is configured with a toolchain which doesn’t
support C11. We currently require C99. If nobody complains (as directed
by this warning) we will start to require C11 in the next unstable
release series (2.85).

See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3574#note_1859924

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-04 15:59:51 +00:00
Philip Withnall
97fdba0d2f Merge branch 'cancellable-source-dispose-races' into 'main'
gcancellable: Ignore cancelled callback on disposed source

Closes #3448

See merge request GNOME/glib!4206
2025-02-04 14:40:56 +00:00
Philip Withnall
ff2c5c3e74
tests: Fix non-atomic accesses to atomic variables in cancellable test
As suggested by Marco Trevisan in !4206.

This might eliminate some spurious failures of the test.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-04 14:06:15 +00:00