Commit Graph

25624 Commits

Author SHA1 Message Date
Philip Withnall
cd9a5c173a Merge branch 'rybalkin-pcre2' into 'main'
replace pcre1 with pcre2

Closes #1085

See merge request GNOME/glib!2529
2022-07-12 11:46:35 +00:00
Aleksei Rybalkin
8d5a44dc8f replace pcre1 with pcre2 2022-07-12 11:46:34 +00:00
Philip Withnall
6997ebcfd7 Merge branch 'thread-pool-slow-really-stops-unused' into 'main'
glib/test/thread-pool-slow: Ensure all unused threads are really stopped

Closes #2685

See merge request GNOME/glib!2804
2022-07-12 11:44:05 +00:00
Danial Behzadi
e5f3b08b54 Update Persian translation 2022-07-12 11:05:59 +00:00
Danial Behzadi
71e76fa4e8 Update Persian translation 2022-07-12 10:48:03 +00:00
Marco Trevisan (Treviño)
a275ee6679 gthreadpool: Update unused_threads while we still own the pool lock
As per the rationale explained in the previous commit, we could end up
having the unused_threads value not to be conformant to what
g_thread_pool_get_num_threads() returns, because an about-to-be-unused
thread might not be counted yet as such, while the pool threads number
has been already decreased.

To avoid such scenario, and to make sure that when all the pool's
threads are stopped, they're unmarked as unused, let's increase the
unused_threads value earlier, while we still own the pool lock so that
it will always include the pool that is not used anymore, but not yet
queued.

As per this we can update the test, not to repeat the stop-unused call
as now we're sure that when the pool has no threads anymore, the unused
threads value is also updated accordingly.

Also adding a tests with multiple pools.
2022-07-11 19:56:26 +02:00
Marco Trevisan (Treviño)
fabdc2d4fa glib/test/thread-pool-slow: Ensure all unused threads are really stopped
In this tests we wanted to ensure that all the unused threads were
stopped, however while we were calling g_thread_pool_stop_unused_threads
some threads could still be in the process of being recycled even tough
the pool's num_thread values are 0.

In fact, stopping unused threads implies also resetting back the max
unused threads to the previous value, and in this test it caused it to
go from -1 -> 0 and back to -1, after killing the unused threads we
knew about; thus any about-to-be-unused thread that is not killed during
this call will be just left around as a waiting unused thread afterwards.

However, if this function was getting called when a thread was in
between of calling the user function and the moment it was being
recycled (and so when the pool num_threads was updated), but this thread
was not counted in unused_threads, we ended up in having a race because
all the threads were consumed from our POV, but some were actually not
yet unused, and so were kept waiting forever for some new job.

To avoid this in the test, we can ensure that we stop the unused
threads until we the number of them is really 0.

Sadly we need to repeat this as we don't have a clear point in which we
are sure about the fact that our threads are done, while it would be
wrong to stop a thread that is technically not yet marked as unused.

We could also do this in g_thread_pool_stop_unused_threads() itself, but
it would make such function to wait for threads to complete, and this is
probably not what was expected in the initial API.

Fixes: #2685
2022-07-11 19:56:26 +02:00
Marco Trevisan (Treviño)
a5ccaa0525 glib/tests/thread-pool-slow: Fix indentation in test_thread_stop_unused
It used three-spaces indentation instead of 2, fix it.
2022-07-11 19:56:26 +02:00
Marco Trevisan
32dbedc5f2 Merge branch 'custom-dispatch-test-more' into 'main'
gobject/tests/custom-dispatch: Add few more tests

See merge request GNOME/glib!2802
2022-07-08 23:16:46 +00:00
Marco Trevisan (Treviño)
28dc989fc1 gobject/tests: Add test to verify that custom dispatch is called on init
As per this, rename the old test so that it's more in line with the
new one and with what it does.
2022-07-09 00:24:13 +02:00
Marco Trevisan (Treviño)
ed130c8d3b gobject/tests/custom-dispatch: Mark the foo property as explicit-notify
We're calling g_object_notify so let's not make gobject to call it for
us.

This also allows to test that changing a property again doesn't lead to
dispatch properties being called.
2022-07-08 23:54:43 +02:00
Marco Trevisan
fb607d3feb Merge branch '2776-follow-up' into 'main'
gobject: Small speedup in weak-ref-set

See merge request GNOME/glib!2801
2022-07-08 14:37:53 +00:00
Peter Bloomfield
3290ebfadc gobject: Small speedup in weak-ref-set 2022-07-08 14:37:53 +00:00
Matthias Clasen
9d89f75a50 Merge branch 'release-docs' into 'main'
docs: Document the release process

See merge request GNOME/glib!2763
2022-07-08 14:16:47 +00:00
Emmanuele Bassi
043f3dcf11 Merge branch 'wip/pwithnall/2216-pidfd-sigchld' into 'main'
gmain: Use waitid() on pidfds rather than a global SIGCHLD handler

Closes #2216

See merge request GNOME/glib!2408
2022-07-08 14:10:13 +00:00
Emmanuele Bassi
60346f1873 Merge branch 'another-victim-of-gobject' into 'main'
gobject: Fix a recent regression

See merge request GNOME/glib!2794
2022-07-08 14:00:39 +00:00
Matthias Clasen
edcd2d4df4 Add a test for custom dispatch_properties_changed
This tests that we call a custom dispatch_properties_changed,
even in the absence of connected notify handlers. (A recent
optimization broke that and caused a regression in GTK).
2022-07-08 14:03:34 +01:00
Matthias Clasen
c0a618a716 gobject: Don't skip custom dispatch_properties_changed
When I optimized GObject to skip property notification
in some cases, I looked for whether the class has a
custom notify vfunc. I overlooked that that
dispatch_properties_changed can also be customized,
and if it is, we better not skip change notification.

This showed up as breakage in the adjustment tests
in the GTK testsuite.
2022-07-08 13:57:40 +01:00
Philip Withnall
f615eef4ba gmain: Use waitid() on pidfds rather than a global SIGCHLD handler
When the system supports it (as all Linux kernels ≥ 5.3 should), it’s
preferable to use `pidfd_open()` and `waitid()` to be notified of
child processes exiting or being signalled, rather than installing a
default `SIGCHLD` handler.

A default `SIGCHLD` handler is global, and can never interact well with
other code (from the application or other libraries) which also wants to
install a `SIGCHLD` handler.

This use of `pidfd_open()` is racy (the PID may be reused between
`g_child_watch_source_new()` being called and `pidfd_open()` being
called), so it doesn’t improve behaviour there. For that, we’d need
continuous use of pidfds throughout GLib, from fork/spawn time until
here. See #1866 for that.

The use of `waitid()` to get the process exit status could be expanded
in future to also work for stopped or continued processes (as per #175)
by adding `WSTOPPED | WCONTINUED` into the flags. That’s a behaviour
change which is outside the strict scope of adding pidfd support,
though.

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

Helps: #1866
Fixes: #2216
2022-07-07 14:08:29 +01:00
Philip Withnall
a7efce14e0 Merge branch 'issue-2659' into 'main'
Fix  /maincontext/timeout-once randomly fails

Closes #2659

See merge request GNOME/glib!2780
2022-07-07 12:34:45 +00:00
Philip Withnall
7b93693ab3 gmain: Add a clarifying comment about exit statuses vs wait statuses
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Helps: #2216
2022-07-07 13:05:18 +01:00
Marc-André Lureau
1a29fd4308 tests/mainloop: iterate for a little while for timeout-once
On win32, WaitForSingleObject may return before the timeout is
dispatched, as it doesn't have a resolution higher than the system tick.
Wait for ~50ms before checking the callback changes.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-07-07 15:52:25 +04:00
Marc-André Lureau
17ac6642c7 gmain: do not wakeup the wakeup registration
Do not wakeup immediately for our own context wakeup poll registration.

g_main_context_add_poll_unlocked() will call g_wakeup_signal() to wake
up the loop waiting in poll(). Doing so during context creation will
create an extra wakeup for the first poll().

Skip the wakeup call if it is the wake_up_rec registration. No other
sources/caller should ever reach that condition.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-07-07 15:52:25 +04:00
Philip Withnall
ed564b71dd Merge branch '2672-dataset-tests-and-fixes' into 'main'
gdataset: Preserve destruction order

Closes #2672 and #2676

See merge request GNOME/glib!2776
2022-07-07 11:52:19 +00:00
Marc-André Lureau
a43723ef17 tests/spawn-singlethread: fix test EOL on win32
The "arg" argument is given in \n-ending form, but the returned result
is \r\n-ending.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-07-07 15:35:28 +04:00
Philip Withnall
1bf53c9ced Merge branch 'strerror_r-int-variant-support' into 'main'
gbacktrace: Handle case of strerror_r returning an int value

See merge request GNOME/glib!2800
2022-07-07 11:14:44 +00:00
Marco Trevisan (Treviño)
d21d213d00 gstrfuncs: Update docs for g_strerror with a string closer to reality 2022-07-07 00:42:45 +02:00
Marco Trevisan (Treviño)
edd718ba48 gstrfuncs: Handle the case strerror_r returns an error
In the case strerror_r returns an error (both in the char* variant and
in the int variant) we should not try to proceed converting the message
and adding to the errors maps, as that's likely causing errors.

So, let's just return a null string in case this happens
2022-07-07 00:42:45 +02:00
Marco Trevisan (Treviño)
640e586251 gbacktrace: Handle case of strerror_r returning an int value
As it's the case in FreeBSD and Mac OS X.
2022-07-07 00:42:45 +02:00
Marco Trevisan
c25ad9aa56 Merge branch 'error-unused-results' into 'main'
Remove occurrences of unused-results warnings and mark them as errors

See merge request GNOME/glib!2798
2022-07-06 17:17:35 +00:00
Marco Trevisan (Treviño)
8c5dac1eb2 glib/tests/fileutils: use g_assert_no_errno instead of manual checking 2022-07-06 18:41:10 +02:00
Marco Trevisan (Treviño)
b61cd872f1 build: Threat unused-result warnings as errors
We don't have any in code now, so we should definitely ensure that we
won't introduce anymore unguarded calls.
2022-07-06 18:41:10 +02:00
Marco Trevisan (Treviño)
7a382438aa glib/tests: Ensure that calls to write, system, symlink and pipe are checked
Assert that calls to such system calls are returning the expected values
2022-07-06 18:41:10 +02:00
Marco Trevisan (Treviño)
a5390002fc gio-tool-mount: Exit with error in case we can't read from stdin
It's a fatal situation so we can just exit without caring much.
2022-07-06 16:05:33 +02:00
Marco Trevisan (Treviño)
0e4d8c2478 gbacktrace: Ensure return values of write, dup and fgets are used
Make sure that we did not error when doing write or read operations, and
in such case, just exit reporting the error.
2022-07-06 16:02:13 +02:00
Philip Withnall
8385f52db7 Merge branch 'inline-macros' into 'main'
gmacros: Provide platform-independent G_ALWAYS_INLINE and G_NO_INLINE

See merge request GNOME/glib!2781
2022-07-06 13:40:10 +00:00
Marco Trevisan
45028d7d3e Merge branch 'gmodule-invalid-la-file' into 'main'
gmodule: Improve error handling for invalid .la files

See merge request GNOME/glib!2796
2022-07-06 13:00:09 +00:00
Marco Trevisan (Treviño)
e59ac0bc2d gthread-posix: Use G_NO_INLINE instead of actual attribute
Even if this is gcc/clang-only code, it's just better to use the generic
macros we now have.
2022-07-06 14:57:06 +02:00
Marco Trevisan (Treviño)
a6f8fe071e cleanup: Replace G_GNUC_NO_INLINE with G_NO_INLINE
As per this we can also now mark G_GNUC_NO_INLINE as
GLIB_AVAILABLE_MACRO_IN_2_58, given that we don't have anymore headers
using it.
2022-07-06 14:57:06 +02:00
Marco Trevisan (Treviño)
15cd0f0461 gmacros: Provide platform-independent G_ALWAYS_INLINE and G_NO_INLINE
We had gcc-only implementations for them while both can be used in all
the supported platforms we have.

So let's just provide generic definitions, while we keep the old ones
for both consistency and retro-compatibility.
2022-07-06 14:57:06 +02:00
Philip Withnall
06be6ac8fc gmodule: Use Unicode quotation marks in error messages
This makes them a little nicer to read.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-07-06 13:33:46 +01:00
Philip Withnall
9b02e58e88 gmodule: Improve error handling for invalid .la files
If a `.la` file is empty, `lt_libdir` and/or `lt_dlname` won’t be set,
but will then still be used in `g_strconcat()`, leading to invalid
output.

Detect that and return an error.

Adds a unit test.

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

Coverity CID: #1474756
2022-07-06 13:33:10 +01:00
Marco Trevisan
5764e3944d Merge branch 'key-file-dead-code' into 'main'
gkeyfile: Remove some unreachable code

See merge request GNOME/glib!2795
2022-07-06 11:06:46 +00:00
Marco Trevisan
d74c773fa4 Merge branch 'more-spdx2' into 'main'
gio: Add some missing license and copyright headers

See merge request GNOME/glib!2797
2022-07-06 11:05:56 +00:00
Philip Withnall
59fc26cbaa gio: Add some missing license and copyright headers
These headers have all been written manually, by looking through the git
log for each file and noting the copyright of each significant
contribution.

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

Helps: #1415
2022-07-05 12:30:46 +01:00
Philip Withnall
1b7f76f1ec docs: Mark .wrap files as uncopyrightable
They’re too trivial to be copyrightable.

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

Helps: #1415
2022-07-05 12:15:15 +01:00
Philip Withnall
41691cc4c8 Merge branch 'more-spdx' into 'main'
Add more SPDX license headers

See merge request GNOME/glib!2706
2022-07-05 11:06:49 +00:00
Philip Withnall
3c69cd369f gkeyfile: Remove some unreachable code
There’s a precondition assertion on the function which checks that
`group_name != NULL`.

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

Coverity CID: #1474780
2022-07-05 10:41:49 +01:00
Peter Bloomfield
4ef2025d47 gobject/tests/binding: Add a test with run-dispose
Add tests in which `g_object_run_dispose()` is called on the source or target
of a `GBinding`. After commit a4fa456e67,
the target test caused a failed assertion in `g_weak_ref_set()` that was not
found by the existing tests.  Commit 94ba14d542
weakens the assertion to allow the test to succeed.

See https://gitlab.gnome.org/GNOME/glib/-/issues/2676
2022-07-04 13:16:21 -04:00
Peter Bloomfield
94ba14d542 gobject: Weaken an assertion in g_weak_ref_set()
When weak references are being cleaned up, it is possible for the `qdata` for
both `quark_weak_locations` and `quark_weak_refs` to have been deallocated,
so that `g_datalist_id_get_data()` returns `NULL` for both. This happens
when `g_object_run_dispose()` is called for the target of a `GBinding`,
and is not an error.

See https://gitlab.gnome.org/GNOME/glib/-/issues/2676
2022-07-03 14:56:44 -04:00