Commit Graph

32133 Commits

Author SHA1 Message Date
Philip Withnall
0558fc541e gsocketlistener: Factor out code to add sockets to internal structures
This introduces no functional differences, just makes some upcoming
changes clearer.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3739
2025-07-25 16:04:37 +01:00
Philip Withnall
4e1fcbffbd gsocket: Handle cancellation of connect() in non-blocking mode
As with the previous commit, but for `g_socket_connect()`, which is the
other cancellable use of `g_socket_condition_wait()` in the file.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-25 15:29:51 +01:00
Philip Withnall
e6a1eacfe1 gsocket: Handle cancellation of accept() in non-blocking mode
Currently, if `g_socket_accept()` is called with a cancelled cancellable
and the socket is in non-blocking mode, `G_IO_ERROR_CANCELLED` is not
returned, because the cancellable is only checked in the call to
`g_socket_condition_wait()`, which only happens in blocking mode.

Fix that and add a unit test.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3739
2025-07-25 15:20:13 +01:00
Philip Withnall
3d0b142bf6 gwin32: Document fallback behaviour of g_win32_error_message()
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Fixes: #3740
2025-07-25 10:23:04 +01:00
Philip Withnall
764aaae391 gwin32: Reformat documentation for g_win32_error_message()
Port it to gi-docgen format and improve it to match the documentation
style guide.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3740
2025-07-25 10:21:04 +01:00
Philip Withnall
b142f130b1 Merge branch 'memory-monitor-race' into 'main'
tests: Connect to GMemoryMonitor signals earlier

See merge request GNOME/glib!4709
2025-07-25 00:24:47 +00:00
Philip Withnall
8dbc637ab7 Merge branch 'kate/fix-test-error' into 'main'
Fix test error for GMemoryMonitor

See merge request GNOME/glib!4713
2025-07-23 12:40:10 +00:00
Philip Withnall
341cd08a42 gmemorymonitorbase: Emit signals in the global default main context
`GMemoryMonitor` is a singleton, which means we can’t use the usual
approach of emitting signals in the thread-default main context from the
time of construction of the object.

The next best thing is to emit them in the global default main context.
For many applications, this will be exactly what they are expecting. For
multi-threaded applications, they will need to implement their own
thread safety in the signal handler, but they would have to do that
anyway.

Currently, the signals are emitted in the GLib worker thread (for the
PSI and poll implementations of `GMemoryMonitor`) — this is the worst
option, because it means that third party signal handlers could block
the worker thread (which is precisely what the worker thread is meant to
avoid).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-23 13:27:58 +01:00
Kate Hsuan
7e7c452d4a gio: gmemorymonitorpsi: Fix test error since memory free ratio test can be skipped when performing the test
The memory free ratio test can be skipped when we run the test. If
proc_override is TRUE and proc path is overridden, the memory free
ratio test can be skipped.
2025-07-23 20:13:19 +08:00
Kate Hsuan
e9b0fe2879 gio: gmemorymonitorpoll: Fix unit test error since the callback returns earlier
The value overriding has to be set before testing the value and returning
the callback. Otherwise, the callback can't emit a signal to the test
program.
2025-07-23 20:09:26 +08:00
Philip Withnall
6a399d740a Merge branch '3712-test-pool-fail' into 'main'
tests/thread-pool: Add a thread-pool fail test

See merge request GNOME/glib!4712
2025-07-22 19:02:24 +00:00
Peter Bloomfield
5fd87c318a tests/thread-pool: Add a thread-pool fail test
Test that g_thread_pool_new() fails gracefully when threads cannot be
created.

Helps https://gitlab.gnome.org/GNOME/glib/-/issues/3712
2025-07-22 19:02:24 +00:00
Michael Catanzaro
cc1bc32211 Merge branch 'mainloop-slow-test' into 'main'
tests: Skip slow mainloop test on valgrind

See merge request GNOME/glib!4707
2025-07-22 07:52:16 -05:00
Michael Catanzaro
4922a4bfc5 Merge branch 'filename-completer-free-undefined' into 'main'
gfilenamecompleter: Fix g_object_unref() of undefined value

See merge request GNOME/glib!4708
2025-07-22 07:50:50 -05:00
Philip Withnall
ee5e750be3 tests: Connect to GMemoryMonitor signals earlier
It might be possible for the `low-memory-warning` signal to be emitted
(by the GLib worker thread) before the test has connected to it, which
could cause the tests to loop forever.

Potentially fixes
https://gitlab.gnome.org/pwithnall/glib/-/jobs/5322491, though I have
not been able to reproduce the race locally.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-22 13:33:24 +01:00
Philip Withnall
a41d1681be gfilenamecompleter: Fix g_object_unref() of undefined value
If the first `goto out` is taken, `file` has not yet been initialised,
but `g_clear_object (&file)` is called on it, and things get unhappy.

Fix that by following standard convention and initialising
‘autoptr’-like variables at declaration time.

Spotted by scan-build in
https://gitlab.gnome.org/GNOME/glib/-/jobs/5321883.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-22 12:57:14 +01:00
Philip Withnall
2f575c38b9 tests: Skip slow mainloop test on valgrind
The `mainloop` test suite takes about 775s on my machine under valgrind
with this test enabled, vs 50s without this test enabled.

This causes CI failures like
https://gitlab.gnome.org/GNOME/glib/-/jobs/5321882.

I’m not sure that valgrind will actually successfully reproduce the race
condition because it runs too slowly (but I haven’t verified that by
reverting the fix for the race).

In any case, you can still choose to run the test under valgrind with
`-m thorough`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-22 12:20:32 +01:00
Philip Withnall
89f24b81e0 Merge branch '3712-clean-up-on-fail' into 'main'
gthreadpool: Clean up when g_thread_pool_new fails

See merge request GNOME/glib!4706
2025-07-21 22:48:35 +00:00
Peter Bloomfield
96766ac51c gthreadpool: Clean up when g_thread_pool_new fails 2025-07-21 22:48:35 +00:00
Philip Withnall
131fe2b483 2.85.2
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2.85.2
2025-07-21 18:47:53 +01:00
Philip Withnall
8b9c9e76f3 Merge branch 'kate/replace-backend' into 'main'
gio: gmemorymonitorpsi: Replace GMemoryMonitor backend with kernel PSI event

See merge request GNOME/glib!4481
2025-07-21 17:32:21 +00:00
Kate Hsuan
7518406d08 gio: tests: memory-monitor-psi: test for the PSI backend of GMemoryMonitor
This tests the PSI backend when receiving the signal.
2025-07-21 17:39:25 +01:00
Kate Hsuan
caffa53bca gio: tests: memory-monitor-poll: test for the poll backend of GMemoryMonitor
The unit test inplementation for GMemoryMonitor poll backend. The test includes
loading the API and the signals of LOW, MEDIUM, and CRITICAL level.
2025-07-21 17:39:25 +01:00
Kate Hsuan
32ea357130 gio: gmemorymonitorpoll: Poll backend for the GMemoryMonitor
This backend periodically watch the memory free ratio through sysinfo().
It signals the applications when the memory free ratio drops to 40%, 30%,
and 20% for LOW, MEDIUM, CRITICAL status, respectively.
2025-07-21 17:39:25 +01:00
Kate Hsuan
308709b8d9 gio: gmemorymonitorpsi: Kernel PSI backend for GMemoryMonitor
The PSI backend is based on Kernel PSI [1]. It monitors the memory
allocation time with in a given time window. If the allocation time
is more than the given threshold, Kernel signal the application to
deliver the memory pressure events.

The current thresholds are:
LOW: 70ms out of 2 seconds for partial stall
MEDIUM: 100ms out of 2 seconds for partial stall
CRITICAL: 100ms out of 2 seconds for full stall

[1] https://docs.kernel.org/accounting/psi.html
2025-07-21 17:39:25 +01:00
Kate Hsuan
94e6da0fca gio: gmemorymonitorbase: parent class of GMemoryMonitor backends
This class provides the shared functions, such as sending a signal and
string and value conversion. The backend classes should inherit this
class to get the shared functions.

It adds a configure time check for `sysinfo()`, as some systems don’t
have it.
2025-07-21 16:09:46 +01:00
Philip Withnall
1164431132 Merge branch 'application-command-line-test' into 'main'
tests: Add a regression test for GApplication command line handling

See merge request GNOME/glib!4704
2025-07-21 12:42:26 +00:00
Philip Withnall
17e8f653aa Merge branch 'copy_capacity' into 'main'
garray: Set capacity in terminated take functions

See merge request GNOME/glib!4699
2025-07-21 12:31:14 +00:00
Philip Withnall
1ffa751730 Merge branch 'copy_len' into 'main'
garray: Avoid exponential growth in g_array_copy

See merge request GNOME/glib!4698
2025-07-21 12:01:54 +00:00
Philip Withnall
cc65d91559 tests: Add a regression test for GApplication command line handling
This will catch regressions like
fc030b2b64 if they happen again in future,
by testing that fallback argument parsing code path in
`g_application_run()`.

Heavily based on the PyGObject `test_local_and_remote_command_line` unit
test at
578a55982a/tests/test_gio.py (L289).

Thanks to Arjan Molenaar for investigating the failure and writing it
up in !4703.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-21 12:52:20 +01:00
Philip Withnall
b3d09306d1 Merge branch 'build_path_oob' into 'main'
gfileutils: Fix OOB read in g_build_path(name)_va

See merge request GNOME/glib!4700
2025-07-21 11:41:25 +00:00
Philip Withnall
e673eb5444 Merge branch 'backtrace_oob' into 'main'
gbacktrace: Fix OOB write in stack_trace

See merge request GNOME/glib!4701
2025-07-21 11:36:47 +00:00
Philip Withnall
96c9b5e0cc Merge branch 'fix-command-line-options-ref' into 'main'
application: NULL check for options

See merge request GNOME/glib!4703
2025-07-21 11:20:39 +00:00
Philip Withnall
bef060824c Merge branch 'wip/kabus/fix-leaks' into 'main'
gio/filenamecompleter: Fix leaks

See merge request GNOME/glib!4702
2025-07-21 11:19:30 +00:00
Arjan Molenaar
fc030b2b64 application: NULL check for options
Do an extra check if the options argument is NULL,
This will avoid unnessecary (critical warning).

`g_application_run` calls the code with options == NULL.
2025-07-20 16:40:13 +02:00
Khalid Abu Shawarib
3d13946c3b gio/filenamecompleter: Fix leaks 2025-07-20 04:57:01 +03:00
Tobias Stoeckmann
183d71d215 gbacktrace: Fix OOB write in stack_trace
The array buffer is of size BUFSIZE. The if-check correctly avoids
writing characters into the buffer, but the ending newline may still
overflow buffer. Keep space for the EOL character.
2025-07-18 23:29:54 +02:00
Tobias Stoeckmann
23b70b0d36 gfileutils: Fix OOB read in g_build_path(name)_va
If an array with more than INT_MAX elements is passed to functions
internally calling g_build_path_va or g_build_pathname_va, then a
signed integer overflow and eventual out of boundary read access can
occur.

Use size_t instead of gint for lengths and array sizes.
2025-07-18 22:50:27 +02:00
Michael Catanzaro
03664fe237 Merge branch 'bsd-gio-tool-fix' into 'main'
tests: Loosen string comparison assertion in gio-tool.py

See merge request GNOME/glib!4693
2025-07-18 13:39:54 -05:00
Tobias Stoeckmann
d90352a43d garray: Avoid exponential growth in g_array_copy
The g_array_copy function uses elt_capacity as length argument for
g_array_sized_new. With a zero terminated array, this effectively
means that the next allocation is doubled in size.

Avoid this by doing the same as g_ptr_array_copy, i.e. use the length.
This makes sure that elt_capacity is roughly the same (only differs
if the copied array has unallocated data in it).
2025-07-18 20:23:10 +02:00
Tobias Stoeckmann
5c15ecb0c5 garray: Set capacity in terminated take functions
If supplied data argument is not NULL, then add the actually existing
null/zero terminated element to alloc/elt_capacity. Otherwise the
termination element is not taken into account, because the length only
counts the non-termination elements.

Purely defensive measurement. I don't think that this triggered any
bug (only one needless realloc call if set_size functions are called
with the current length).
2025-07-18 19:52:20 +02:00
Philip Withnall
2bba358f0b Merge branch '3712-thread-pool' into 'main'
gthreadpool: Catch pool_spawner creation failure

Closes #3712

See merge request GNOME/glib!4696
2025-07-17 22:46:50 +00:00
Peter Bloomfield
3bee5d4aaa gthreadpool: Catch pool_spawner creation failure 2025-07-17 22:46:50 +00:00
Philip Withnall
16d170cdf6 Merge branch 'size_width_skip' into 'main'
tests: Do not always skip array overflow checks

See merge request GNOME/glib!4694
2025-07-17 08:50:46 +00:00
Philip Withnall
03c720df7d Merge branch 'array_elt_size_zero' into 'main'
garray: Add more element_size > 0 checks

See merge request GNOME/glib!4695
2025-07-17 08:48:25 +00:00
Philip Withnall
299b235b90 Merge branch 'array-test-leak-fix' into 'main'
tests: Fix a minor leak in array-test

See merge request GNOME/glib!4692
2025-07-17 08:43:46 +00:00
Tobias Stoeckmann
932ef1765c tests: Do not always skip array overflow checks
The preprocessor check for SIZE_WIDTH fails if stdint.h is not included.
Also, adjust the error messages for clarity.
2025-07-15 22:15:42 +02:00
Tobias Stoeckmann
b0860ae9d4 garray: Add more element_size > 0 checks
The functions g_array_new and g_array_sized_new already protect
themselves against a zero element size.

Do the same in g_array_new_take and g_array_new_take_zero_terminated
to avoid a NULL pointer dereference and an endless loop.
2025-07-15 22:14:35 +02:00
Philip Withnall
1eabe6c6b1 Merge branch 'null_terminated_check' into 'main'
garray: Fix out of boundary write in g_ptr_array_copy

See merge request GNOME/glib!4690
2025-07-15 12:40:56 +00:00
Philip Withnall
41fe7c3797 tests: Loosen string comparison assertion in gio-tool.py
On BSD, the subprocess being spawned by `gio launch` ends up emitting
debug output onto stdout, which confuses the strict string assertion in
the test.

Instead use a ‘contains’ assertion.

Fixes this failure:
```
348/385 glib:gio+no-valgrind / gio-tool.py                                     ERROR            0.39s   exit status 1
――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――
stderr:
(test program exited with status code 1)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stdout:  12: UNKNOWN:   ---
stdout:  13: UNKNOWN:     message: |
stdout:  14: UNKNOWN:       Traceback (most recent call last):
stdout:  15: UNKNOWN:         File "/var/tmp/gitlab_runner/builds/Ff4WDDRj/0/GNOME/glib/_build/../gio/tests/gio-tool.py", line 130, in test_absolute_from_folder
stdout:  16: UNKNOWN:           self.launchAndCheck(self.entry, cwd=self.folder)
stdout:  17: UNKNOWN:         File "/var/tmp/gitlab_runner/builds/Ff4WDDRj/0/GNOME/glib/_build/../gio/tests/gio-tool.py", line 126, in launchAndCheck
stdout:  18: UNKNOWN:           self.assertEqual(result.out, str(self.entry))
stdout:  19: UNKNOWN:       AssertionError: '(gio launch:35500): GLib-GIO-DEBUG: 04:55[130 chars]ntry' != '/tmp/tmpa8oxxwvv/folder/desktop.entry'
stdout:  20: UNKNOWN:       - (gio launch:35500): GLib-GIO-DEBUG: 04:55:51.790: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
stdout:  21: UNKNOWN:         /tmp/tmpa8oxxwvv/folder/desktop.entry
stdout:  22: UNKNOWN:   ...
```

seen here: https://gitlab.gnome.org/GNOME/glib/-/jobs/5301812

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-07-15 12:26:43 +01:00