9274 Commits

Author SHA1 Message Date
Philip Withnall
3bf2875ce4
Revert "gmain: Use alternate signal stack if the application provides one"
This reverts commit 280c8d41fbfd4d344dff677bae657f286617464b.

It breaks the unit tests on macOS (see #3314) and no fix has been
forthcoming.

The alternate stack changes can be resubmitted once they include a
working unit test on macOS, as evidently its treatment of alternate
stacks differs from that on Linux, and hence needs testing.

Helps: #3314
2024-04-08 12:26:40 +01:00
Philip Withnall
73a4485ed4
gbookmarkfile: Fix link to the Desktop Bookmark Specification
Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Fixes: #3313
2024-04-03 10:54:22 +01:00
L. E. Segovia
bfebf55d18 glib/gthread-posix: Fix missing saved_errno variable in Android's g_futex_simple 2024-04-02 18:45:23 -03:00
L. E. Segovia
9f95946e01 gutils: Use __ANDROID__ to test for the OS, not __BIONIC__
See https://android.googlesource.com/platform/bionic/+/HEAD/docs/defines.md
2024-04-02 08:46:33 -03:00
L. E. Segovia
fe8348efb4 glib/gthread-posix: Use __ANDROID__ to test for the OS, not __BIONIC__
See https://android.googlesource.com/platform/bionic/+/HEAD/docs/defines.md
2024-04-02 08:45:19 -03:00
L. E. Segovia
0da4b1bf31 gio-launch-desktop, gmessages: Fix journald support using __BIONIC__ to skip support on Android
As per the Bionic docs, this functionality is Android, not bionic specific.

See: https://android.googlesource.com/platform/bionic/+/HEAD/docs/defines.md
2024-04-02 08:40:48 -03:00
L. E. Segovia
049c8e70c8 glib/gthread-posix: Use the config.h macros to detect futex support 2024-04-02 00:00:21 -03:00
L. E. Segovia
06ea9aed58 glib/gthread-posix: Block futex_time64 usage on Android API level < 30
This syscall is seccomp blocked on all lower API levels:

ee7bc3002d
2024-04-02 00:00:21 -03:00
Ville Skyttä
b20647c2e2 docs: spelling and grammar fixes
Signed-off-by: Ville Skyttä <ville.skytta@iki.fi>
2024-04-01 11:01:06 +00:00
Philip Withnall
ad903074a4 Merge branch 'sa-onstack-unix-signals' into 'main'
gmain: Use alternate signal stack if the application provides one

See merge request GNOME/glib!3983
2024-03-28 09:09:16 +00:00
Marco Trevisan (Treviño)
280c8d41fb gmain: Use alternate signal stack if the application provides one
Some applications, toolkits or languages may define an alternative stack
to use for traces. This is for example the case of go.

So, in case an application defines an alternate signal stack, GLib should
use that instead of the default one to receive signals otherwise it may
break the application expectations and write where it's not allowed to.
2024-03-26 16:29:39 +01:00
Emmanuele Bassi
abd19dbe5c Merge branch 'dataset-failure' into 'main'
tests: Remove unnecessary subprocess from dataset tests

See merge request GNOME/glib!3977
2024-03-26 11:11:06 +00:00
Calvin Walton
013980d839 Use the python found by meson as the interpreter for installed scripts
The python interpreter found by `/usr/bin/env python3` is not
necessarily the same installation as the one that's found by meson's
`pymod.find_installation('python')`. This means that even though meson
is checking that the python installation it found includes the
'packaging' module, the scripts might not have access to that module
when run.

For distribution packaging, it's usually desirable to have python script
interpreters be fully specified paths, rather than use `/usr/bin/env`,
to ensure the scripts run using the expected python installation (i.e.
the one where the python 'packaging' dependency is installed).

The easiest way to fix this is to set the script interpreter to the
`full_path()` of the python interpreter found by meson. The specific
python interpreter that will be used can be selected through the use of
a meson machine file by overriding the "python" program. Many
distributions already have this set up using meson packaging helpers.
2024-03-25 15:17:59 -04:00
q66
cc25486b23 Use CPU_COUNT to get the number of set CPUs
This fixes an issue with the number getting very big due to
CPU_ISSET not returning exactly 0 or 1.

This also fixes scenarios where there are holes in the CPU
set. E.g. for a simple run like `taskset --cpu-list 1,2,4 ...`
the old code would return 2 instead of 3, due to iterating
until `ncores` (which is 3) and therefore not accounting for
CPUs further in the set.

Ref https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3784
2024-03-25 12:37:15 +01:00
Philip Withnall
63548f63ec Merge branch 'ebassi/strvbuilder-util' into 'main'
Add unref-to-strv to GStrvBuilder

See merge request GNOME/glib!3952
2024-03-22 01:23:18 +00:00
Philip Withnall
daaa447620 tests: Add copyright/licensing header to dataset
This is put together through git archaeology:
```
git log -- glib/tests/dataset.c
```

The following commits were too trivial to have meaningful copyright:
 - 1a2c5e155deacb7ebeb8d0ca2c800a97a90a7ab9
 - ea06ec80634ff8f22882f3bc92effb10ac294e41
 - 0178402c6d5aee998934db6d4b49fff95dc50c48
 - e3d1869ee3b6e269b80723173dc4f85c7cc3eaea
 - c34cc2348cfd3c461974dea4419001dbd9610202
 - d15e6f7c9cbe9a9afc67bfbbdeeb8e9ae2981ce3
 - de8672fe0b9f55047fbaee6f425e330cdfc8189f

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

Helps: #1415
2024-03-22 00:47:28 +00:00
Philip Withnall
44609c3b15 tests: Use g_assert_*() rather than g_assert() in dataset tests
It won’t get compiled out with `G_DISABLE_ASSERT`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-03-22 00:42:27 +00:00
Philip Withnall
1df5759db9 tests: Remove unnecessary subprocess from dataset tests
The dataset tests are using a subprocess to catch possible deadlocks
within the `test_datalist_clear()` test. However, that’s causing
occasional spurious test failures on the slower CI runners, where the
subprocess can take longer than 500ms to run due to the machine being
overloaded.

Remove the subprocess from the test, and allow the test to deadlock if
it fails. The Meson test harness has a timeout for catching things like
this.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-03-22 00:35:05 +00:00
Philip Withnall
1c5f5a6914 Merge branch 'wip/chergert/gpoll-for-gmain' into 'main'
Use ppoll() when possible for more precise timeouts

See merge request GNOME/glib!3958
2024-03-22 00:17:21 +00:00
Emmanuele Bassi
1a5b1393bd Add unref-to-strv to GStrvBuilder
For those projects that cannot use `g_autoptr()`, GStrvBuilder's end
plus unref is not really convenient.

We can crib the "unref to data type" model from GBytes, and have an
additional unref function that also returns the just built GStrv.
2024-03-22 00:08:26 +00:00
Christian Hergert
368cb7eb7b glib/gmain: use ppoll() when possible
If our GPollFunc is set to g_poll() then we can optionally use a poll()
alternative with higher precision. ppoll() provides poll() equivalence
but with timeouts in nanoseconds.

With more precise polling timouts, frame clocks and other timing sensitive
APIs are not restricted to a minimum of 1 millisecond timeout.
2024-03-21 23:46:20 +00:00
Christian Hergert
c840d75395 glib/gmain: plumb timeout as microseconds
This gets access to the timeout as microseconds up until we are about to
enter the GPollFunc. This is useful so that alternative means may be used
to poll with more precision for timeout.
2024-03-21 23:46:20 +00:00
Philip Withnall
afcb839121 Merge branch '3286-strfuncs-annotations' into 'main'
gstrfuncs: Add missing (transfer none) annotations for several funcs

Closes #3286

See merge request GNOME/glib!3963
2024-03-21 23:33:07 +00:00
Philip Withnall
e583a35096 Merge branch 'wip/chergert/fix-gvariant-compile' into 'main'
glib/gvariant: fix compile error with GCC 14.0.1

See merge request GNOME/glib!3973
2024-03-20 11:44:17 +00:00
Christian Hergert
e5409374b2 glib/gvariant: fix compile error with GCC 14.0.1
This was erroring on recent GCC because `struct heap_dict` is smaller than
the publicly provided size (guintptr[16]) in the header for GVariantDict.

Port to use `g_malloc()` directly, and use a static assertion to ensure
we’re allocating the larger of the two struct sizes.
2024-03-20 11:18:11 +00:00
Philip Withnall
e83e4c5535 tests: Mark several additional tests as can_fail on GNU Hurd
These consistently fail on scheduled CI runs, which is not helping our
ability to catch Hurd regressions.

For example, https://gitlab.gnome.org/GNOME/glib/-/jobs/3709402

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

See: #3148
2024-03-19 13:01:26 +00:00
Thomas Haller
1b298d1db1 gobject: add code comment about unlock and toggle_refs_check_and_ref_or_deref()
It may not be obvious, but the moment unlock is called, the locker
instance may be destroyed.

See g_object_unref(), which calls toggle_refs_check_and_ref_or_deref().
It will check for toggle references while dropping the ref count from 2
to 1.  It must decrement the ref count while holding the lock, but it
also must still unlock afterwards.

Note that the locker instance is on the object itself. Once we decrement
the ref count we give up our reference and another thread may race
against destroying the object. We thus must not touch object anymore.
How can we then still unlock?

This works correctly because:

- unlock operations must not touch the locker instance after unlocking.

- assume that another thread races g_object_unref() to destroy the
  object, while we are about to call object_bit_unlock() in
  toggle_refs_check_and_ref_or_deref(). Then that other thread will also
  need to acquire the same lock (during g_object_notify_queue_freeze()).
  It thus is blocked to destroy the object.

Add code comments about that.
2024-03-18 13:55:36 +00:00
Philip Withnall
e0c18a2f04 gstrfuncs: Mention slightly odd return types in docs
See the previous commit for details.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3286
2024-03-13 15:06:34 +00:00
Philip Withnall
6c3ad23634 gstrfuncs: Add missing (transfer none) annotations for several funcs
These unfortunately have `gchar*` return types rather than `const
gchar*`. This is a historical artifact which we can’t change: while
adding `const` would only be an API break and not an ABI break, it would
cause all sorts of C++ code which uses GLib to emit new cast warnings
(similarly, C code with const correctness compiler warnings enabled
would do the same).

The incorrect return type causes the GIR scanner to (reasonably) assume
the return value is allocated, which is wrong.

Fix that by explicitly adding `(transfer none)`.

Also add an explicit `(nullable)` because all three functions are.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Fixes: #3286
2024-03-13 14:48:07 +00:00
Simon McVittie
88c76b89e0 g_warn_if_fail: Document as always evaluating expr
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-03-05 11:06:10 +00:00
Philip Withnall
704d0bb297 gfileutils: Use g_format_size() for another translatable string
As with commit a3c2691c235fa0978167ffba095631d41043be9a, another
instance of the same pattern was missed.

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

Fixes: #3271
2024-03-01 11:57:50 +00:00
Philip Withnall
a3c2691c23 gfileutils: Use g_format_size() for a translatable string
Partially because the use of `G_GSIZE_MODIFIER` breaks translatable
string extraction (issue #3271) and partially because `g_format_size()`
produces more human-readable results anyway.

Prior to commit cf5e371c67 the code was using `%lu`, so this is a fairly
new issue.

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

Fixes: #3271
2024-02-27 09:14:22 +00:00
Philip Withnall
cce3ae98a2 tests: Remove variable-length lookbehind tests for GRegex
PCRE2 10.43 has now introduced support for variable-length lookbehind,
so these tests now fail if GLib is built against PCRE2 10.43 or higher.

See
e8db6fa713/ChangeLog (L94).

Rather than making the tests conditional on the version of PCRE2 in use,
just remove them. They are mostly testing the PCRE2 code rather than
any code in GLib, so don’t have much value.

This should fix CI runs on msys2-mingw32, which updated to PCRE2 10.43 2
days ago.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-02-26 16:55:44 +00:00
Kleis Auke Wolthuizen
72d76922dc girepository: Fix static build under Windows
Properly define `GI_STATIC_COMPILATION` when static build is enabled.
Use `library()` instead of `shared_library()` to allow selecting static builds.
2024-02-21 12:38:40 +01:00
Philip Withnall
f3064e8a5c gutils: Make a variable const to avoid an unnecessary cast
And fix a typo in a comment. This introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-02-13 15:22:04 +00:00
Philip Withnall
060a7c2740 Merge branch 'wip/smcv/issue3252' into 'main'
gdatetime: Fix ja_JA.eucjp expectations when eras are unsupported

Closes #3252

See merge request GNOME/glib!3920
2024-02-13 13:31:29 +00:00
Simon McVittie
9ceed6f0de gdatetime test: Produce more helpful output on mismatches
It's helpful for the assertion message to say what we were expecting and
what we actually got. It's also useful to have g_test_message()
diagnostics to indicate how far into the test we were.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-13 10:39:49 +00:00
Simon McVittie
342d6176e7 gdatetime: Exercise %c, %C format placeholders in ja_JP.eucjp
Previously we didn't test these at all, which made it hard to determine
whether %Ec, %EC had appropriate output on platforms where era-based
dates are unsupported. Now we do, and we can observe that on platforms
with no support for era-based dates, %c matches %Ec and %C matches %EC,
as desired.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-13 10:20:11 +00:00
Simon McVittie
988f4204a1 gdatetime: Fix ja_JA.eucjp expectations when eras are unsupported
I can't read Japanese, but these match the output of:

    env TZ=UTC LC_ALL=ja_JP.eucjp date -d2009-10-24T00:00:00Z '+%c' | iconv -f eucjp -t UTF-8
    env TZ=UTC LC_ALL=ja_JP.eucjp date -d2009-10-24T00:00:00Z '+%C' | iconv -f eucjp -t UTF-8

which seem like a reasonable thing to use as a reference.

According to Google Translate, 平成 refers to the Heisei era, which was
current during 2009, and seems unreasonable to expect as output on a
platform where era-based dates are unsupported.

Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/3252
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-13 10:20:02 +00:00
Philip Withnall
1f9e44d623 glib: Install platform specific headers in a separate step
Maintain them in separate lists within `meson.build`. This makes no
functional difference at the moment, but will be used in an upcoming
commit to generate separate GIR files per platform.

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

Helps: #3037
2024-02-12 17:54:10 +00:00
Philip Withnall
e58abedf28 Revert "gwin32: Un-hide symbols when building GIR"
This reverts commit 50d432c77b07574e16d0bf8ba0de93819e5f92a3.

The platform-specific headers of GLib and Gio are now introspected
separately, so the documentation for them can be built separately, and
this workaround is no longer needed.

Helps: #3037
2024-02-12 17:54:10 +00:00
Philip Withnall
d12a9f00d9 Merge branch 'unix-pipe-open-docs' into 'main'
glib-unix: Fix reference to FD_CLOEXEC in docs for g_unix_pipe_open()

See merge request GNOME/glib!3912
2024-02-09 21:59:59 +00:00
Philip Withnall
8300b52cbb Merge branch 'wip/smcv/closefrom' into 'main'
glib-unix: Add g_closefrom(), g_fdwalk_set_cloexec()

Closes #3247

See merge request GNOME/glib!3884
2024-02-09 14:06:52 +00:00
Philip Withnall
f9cbd07003 Merge branch 'wip/smcv/pipes' into 'main'
glib/tests/unix: Mostly pass O_CLOEXEC to g_unix_pipe_open()

See merge request GNOME/glib!3911
2024-02-09 13:48:02 +00:00
Philip Withnall
6dea98bac4 glib-unix: Fix reference to FD_CLOEXEC in docs for g_unix_pipe_open()
The docs for this should match the docs for `g_unix_open_pipe()`, which
it calls.

Inspired by !3911.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-02-09 13:10:42 +00:00
Simon McVittie
f4afed90e6 tests: Exercise g_fdwalk_set_cloexec() and g_closefrom()
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-09 12:12:29 +00:00
Simon McVittie
82c9a4631d glib/tests/unix: Mostly pass O_CLOEXEC to g_unix_pipe_open()
Using FD_CLOEXEC here is now deprecated. Keep exactly one call with
FD_CLOEXEC, in test_pipe_fd_cloexec().

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-09 11:15:28 +00:00
Simon McVittie
a7d5a6b69a gspawn: Simplify set_cloexec
The copy of this function that moved to glib-unix.c still needs to
implement the fdwalk-style interface, but this copy does not, allowing
us to turn it into a very simple syscall wrapper. Its remaining callers
never check for errors, and it never failed anyway, so remove the
returned value.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-09 10:57:12 +00:00
Simon McVittie
69c1a05ede glib-unix: Add g_closefrom(), g_fdwalk_set_cloexec()
These are the same as Linux `close_range (lowfd, ~0U, 0)` and
`close_range (lowfd, ~0U, CLOSE_RANGE_CLOEXEC)`, but portable.
Unlike some implementations of BSD closefrom(3), they are
async-signal-safe.

The implementations were moved from the GSpawn code, which already
needs all of this functionality anyway, with the exception of
set_cloexec() which was copied (leading to some minor duplication,
but it's very simple).

Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/3247
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-02-09 10:57:12 +00:00
Philip Withnall
e1d603bc3d gslice: Hide g_slice_debug_tree_statistics from introspection
It’s not useful and previously hasn’t been shown in the introspection
API.

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

Fixes: #3231
2024-02-09 10:08:00 +00:00