Commit Graph

24065 Commits

Author SHA1 Message Date
Philip Withnall
6483808df6 Merge branch 'fix-2471' into 'main'
g_output_stream_write_all: Allow NULL empty buffer

Closes #2471

See merge request GNOME/glib!2243
2021-09-21 10:40:14 +00:00
James Westman
f6ddce4b16 g_output_stream_write_all: Allow NULL empty buffer 2021-09-21 10:40:14 +00:00
Philip Withnall
45588107c6 Merge branch 'gio-add-gsettings-nullable-annotations' into 'main'
gsettings: Add various missing (nullable) or (not nullable) annotations

See merge request GNOME/glib!2242
2021-09-21 10:39:37 +00:00
Philip Withnall
b2b7feda8d Merge branch 'safer-toggle-notify' into 'main'
gobject: Ensure an object has toggle references before notifying it

Closes #2394

See merge request GNOME/glib!2072
2021-09-21 10:38:28 +00:00
Philip Withnall
afaa08142b Merge branch 'object-manager-doc-wrong-class' into 'main'
Fix documentation for g_dbus_object_manager_get_object().

See merge request GNOME/glib!2257
2021-09-21 10:19:44 +00:00
Philip Withnall
00b4547711 Merge branch 'unicode-14-updates' into 'main'
Update to Unicode 14

Closes #2490

See merge request GNOME/glib!2252
2021-09-21 09:41:29 +00:00
Matthias Clasen
ab895d91d5 Update to Unicode 14 2021-09-21 09:41:29 +00:00
Robert Ancell
e8568e25ba Fix documentation for g_dbus_object_manager_get_object().
The class in the documentation is true for GDBusObjectManagerClient, but not for GDBusObjectManagerServer.
2021-09-21 15:24:20 +12:00
Marco Trevisan (Treviño)
468246bb3b gobject: Ensure an object has toggle references before notifying it
When an object with toggle reference is notifying a change we just
assume that this is true because of previous checks.
However, while locking, another thread may have removed the toggle
reference causing the waiting thread to abort (as no handler is set at
that point).

To avoid this, once we've got the toggle references mutex lock, check
again if the object has toggle reference, and if it's not the case
anymore just ignore the request.

Add a test that triggers this, it's not 100% happening because this is
of course timing related, but this is very close to the truth.

Fixes: #2394
2021-09-20 17:56:25 +02:00
Philip Withnall
3f1a1cdb78 Merge branch 'prop-set-speedups' into 'main'
Small optimization for g_object_set

See merge request GNOME/glib!2254
2021-09-20 12:47:00 +00:00
Philip Withnall
3e57fc4c02 Merge branch 'always-cleanup-weak-locations' into 'main'
gobject: Cleanup GWeakRef locations on object finalization

Closes #2390 and #865

See merge request GNOME/glib!2064
2021-09-20 12:24:47 +00:00
Philip Withnall
3b67d53227 gobject: Clarify behaviour of adding weak refs during disposal
The previous wording was not clear about what happens if a new weak ref
is taken during disposal (shortly after resurrecting the object with a
new strong ref, otherwise taking the weak ref is invalid).

See: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2064/diffs#note_1270092

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

Helps: #2390
2021-09-20 13:23:34 +01:00
Matthias Clasen
497986cdc1 Small optimization for g_object_setv
No need to call memset in the loop, we can just
initialize all the values in one go.

GtkBuilder is now using g_object_setv, so this
may improve application start times a bit.
2021-09-20 08:21:49 -04:00
Matthias Clasen
23e37e05d2 Small optimization for g_object_set
We've already followed the redirection, no need
to check for that again - just avoid notifying
non-readable properties.
2021-09-20 08:21:42 -04:00
Philip Withnall
97716e7b01 Merge branch 'gstring-min-size' into 'main'
GString: Bump minimum size

See merge request GNOME/glib!2251
2021-09-20 09:08:47 +00:00
Matthias Clasen
7fc7c57b6f GString: Bump minimum size
GString starts out at a size of 2, which is just
not useful. Bump the minimum size to 64 to cut
down on the number of tiny reallocations we do.
2021-09-18 20:16:57 -04:00
Philip Withnall
7692e84f0d build: Post-release version bump to 2.71.0
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-17 11:35:55 +01:00
Philip Withnall
94b74c761d gversionmacros: Add version macros for GLib 2.72
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-17 11:35:21 +01:00
Philip Withnall
861afbe639 Merge branch 'main' into 'main'
gdesktopappinfo: Do not call xterm when it does not exist, inform the caller the launch failed

See merge request GNOME/glib!2245
2021-09-17 10:28:44 +00:00
Marco Trevisan (Treviño)
a7262d6357 gobject: Cleanup weak locations data as part of dispose
Weak locations were not fully cleaned on run_dispose() and after dispose
vfunc was called, so ensure that this is the case.

Fixes: #865
2021-09-17 12:28:01 +02:00
Marco Trevisan (Treviño)
e861f60dcb gobject: Cleanup weak locations when the last one has been removed
As per the previous change, an object that had weak locations set may
need to lock again the weak locations mutex during qdata cleanup, but
we can avoid this when we know we're removing the last location, by
removing the qdata entry and freeing the data.

In case a new location is needed for the same object, new data will be
added.

However, by doing this the weak locations during dispose may be
invalidated once the weak locations lock is passed, so check again if
this is the case while removing them.
2021-09-17 12:27:59 +02:00
Marco Trevisan (Treviño)
ea68b22135 gobject: Cleanup GWeakRef locations on object finalization
It can happen that a GWeakRef is added to an object while it's disposing
(or even during finalizing) and this may happen in a thread that (weak)
references an object while the disposal isn't completed yet or when
using toggle references and switching to GWeakRef on notification (as
the API suggests).

In such scenario the weak locations are not cleaned up when the object
is finalized, and will point to a free'd area.

So, during finalization and when we're sure that the object will be
destroyed for sure, check again if there are new weak locations and
unset them if any as part of the qdata destruction.
Do this adding a new utility function so that we can avoid duplicating
code to free the weak locations.

Added various tests simulating this case.

Fixes: #2390
2021-09-17 12:21:23 +02:00
Philip Withnall
6fd4f36bac 2.70.0
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-17 11:15:53 +01:00
Zander Brown
1da68b3f06 Update British English translation 2021-09-16 16:45:30 +00:00
Philip Withnall
0d57092a03 gobject: Document it’s unsafe to call g_object_ref() from GWeakNotify
The documentation sort of already said this, but it’s better to make it
explicit.

This avoids the situation where some of the weak notify callbacks for an
object have been called, and then a subsequent one resurrects the
object. Without some way of undoing the weak notifications already sent,
that would leave external state which is coupled to the object’s
lifecycle out of sync.

This arose from discussion on !2064.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-15 15:02:47 +01:00
Philip Withnall
e3e5a06d2b Merge branch 'wip/lantw/ci-Replace-FreeBSD-11-with-FreeBSD-13' into 'main'
ci: Replace FreeBSD 11 with FreeBSD 13

See merge request GNOME/glib!2248
2021-09-15 11:43:45 +00:00
Emmanuele Bassi
6fe0f98360 Add a (diagnostic) warning for finalized floating objects
GTK currently checks if a GtkWidget is finalized while still using a
floating reference—i.e. a widget was disposed without any parent
container owning it.

This warning can be useful to identify and trace ownership transfer
issues in libraries using initially unowned floating object types.

To avoid introducing constraints ex post, we can gate this check behind
both the G_ENABLE_DEBUG compile time flag for GLib, and behind the
G_ENABLE_DIAGNOSTIC environment variable run time check.

Fixes: #2489
2021-09-14 16:09:22 +01:00
Ting-Wei Lan
e99597414c ci: Replace FreeBSD 11 with FreeBSD 13
FreeBSD 11 will go EOL in a month, and FreeBSD 13 was released several
months ago. Remove the FreeBSD 11 job and add a FreeBSD 13 job.
2021-09-13 12:25:38 +08:00
Piotr Drąg
f763f2b7cb Update Polish translation 2021-09-11 13:17:25 +00:00
Alan Mortensen
22a43dd22d Updated Danish translation 2021-09-11 14:40:54 +02:00
Balázs Úr
aee274986a Update Hungarian translation 2021-09-10 20:19:11 +00:00
Goran Vidović
1436c15909 Update Croatian translation 2021-09-10 17:24:00 +00:00
Alexandr Miloslavskiy
59e5612339 gsequence: make treap priorities more random to avoid worst-case scenarios
Previously, priority was not randomly generated and was instead derived
from `GSequenceNode*` pointer value.

As a result, when a `GSequence` was freed and another was created, the
nodes were returned to memory allocator in such order that allocating
them again caused various performance problems in treap.

To my understanding, the problem develops like this :
1) Initially, memory allocator makes some nodes
2) For each node, priority is derived from pointer alone.
   Due to the hash function, initially the priorities are reasonably
   randomly distributed.
3) `GSequence` moves inserted nodes around to satisfy treap property.
   The priority for node must be >= than priorities of its children
4) When `GSequence` is freed, it frees nodes in a new order.
   It finds root node and then recursively frees left/right children.
   Due to (3), hashes of freed nodes become partially ordered.
   Note that this doesn't depend on choice of hash function.
5) Memory allocator will typically add freed chunks to free list.
   This means that it will reallocate nodes in same or inverse order.
6) This results in order of hashes being more and more non-random.
7) This order happens to be increasingly anti-optimal.
   That is, `GSequence` needs more `node_rotate` to maintain treap.
   This also causes the tree to become more and more unbalanced.
   The problem becomes worse with each iteration.

The solution is to use additional noise to maintain reasonable
randomness. This prevents "poisoning" the memory allocator.

On top of that, this patch somehow decreases average tree's height,
which is good because it speeds up various operations. I can't quite
explain why the height decreases with new code, probably the properties
of old hash function didn't quite match the needs of treap?

My averaged results for tree height with different sequence lengths:
  Items | before|         after |
--------+-------+---------------+
      2 |  2,69 |  2,67 -00,74% |
      4 |  3,71 |  3,80 +02,43% |
      8 |  5,30 |  5,34 +00,75% |
     16 |  7,45 |  7,22 -03,09% |
     32 | 10,05 |  9,38 -06,67% |
     64 | 12,97 | 11,72 -09,64% |
    128 | 16,01 | 14,20 -11,31% |
    256 | 19,11 | 16,77 -12,24% |
    512 | 22,03 | 19,39 -11,98% |
   1024 | 25,29 | 22,03 -12,89% |
   2048 | 28,43 | 24,82 -12,70% |
   4096 | 31,11 | 27,52 -11,54% |
   8192 | 34,31 | 30,30 -11,69% |
  16384 | 37,40 | 32,81 -12,27% |
  32768 | 40,40 | 35,84 -11,29% |
  65536 | 43,00 | 38,24 -11,07% |
 131072 | 45,50 | 40,83 -10,26% |
 262144 | 48,40 | 43,00 -11,16% |
 524288 | 52,40 | 46,80 -10,69% |

The memory cost of the patch is zero on 64-bit, because the new field
uses the alignment hole between two other fields.

Note: priorities can sometimes have collisions. This is fine, because
treap allows equal priorities, but these will gradually decrease
performance. The hash function that was used previously has just one
collision on 0xbfff7fff in 32-bit space, but such pointer will not
occur because `g_slice_alloc()` always aligns to sizeof(void*).
However, in 64-bit space the old hash function had collisions anyway,
because it only uses lower 32 bits of pointer.

Closes #2468
2021-09-09 23:34:16 +03:00
Philipp Kiemle
205697dd25 Update German translation 2021-09-09 20:18:49 +00:00
Emin Tufan Çetin
f654e4f3bc Update Turkish translation 2021-09-09 18:58:19 +00:00
shironeko
b60cd327fe gdesktopappinfo: Return failure rather than blindly call xterm
Instead of calling xterm when it clearly does not exist and causes a silent error,
inform the user that the launch failed so they can take the right action.
2021-09-09 10:32:44 -04:00
Charles Monzat
9f102c22d4 Update French translation 2021-09-09 06:29:37 +00:00
Anders Jonsson
44666880ad Update Swedish translation 2021-09-07 17:43:09 +00:00
Philip Withnall
73c217dec2 2.69.3
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-07 12:24:07 +01:00
Philip Withnall
573c629bec Merge branch 'readme-release-signing' into 'main'
docs: Add a note about git-evtag to SECURITY.md

See merge request GNOME/glib!2110
2021-09-07 11:21:15 +00:00
Philip Withnall
b8160ce18b docs: Add a note about git-evtag to SECURITY.md 2021-09-07 11:21:12 +00:00
Emmanuele Bassi
21a27f4eb7 Merge branch '2425-settings-schema-range-check' into 'main'
gsettingsschema: Fix docs for g_settings_schema_key_range_check()

Closes #2425

See merge request GNOME/glib!2160
2021-09-07 10:59:09 +00:00
Philip Withnall
c9b1e6654e Merge branch 'gcc-suppress-deprecated-2' into 'main'
Fix false deprecation warnings on old GCC/MSVC

Closes #2472

See merge request GNOME/glib!2234
2021-09-07 10:45:06 +00:00
Evan Miller
508352339a Fix false deprecation warnings on old GCC/MSVC
Closes #2472
2021-09-07 11:21:20 +01:00
Philip Withnall
b52de547cb Merge branch '2481-power-profile-default-value' into 'main'
gpowerprofilemonitorportal: Set property value by default

Closes #2481

See merge request GNOME/glib!2241
2021-09-07 10:16:40 +00:00
Luke Yelavich
452afce221 gsettings: Add various missing (nullable) or (not nullable) annotations
Also added (transfer full) or (transfer none) annotations while I was at it.

This is the result of checking each `Returns:` line in these files. I’ve
only considered nullability and transferability, and not other (potentially
missing or incorrect) annotations.

Helps: #2227
2021-09-07 18:51:18 +10:00
Philip Withnall
4f62fdfd29 tests: Fix subsequent tests after first power-profile test failure
If the first power-profile installed test fails (for example, because
xdg-desktop-portal isn’t available), correctly tear down the dbusmock
object, or it will cause setUp() to fail when the next test in the suite
is run.

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

Helps: #2481
2021-09-06 18:57:06 +01:00
Philip Withnall
d051ef1611 gpowerprofilemonitorportal: Set property value by default
When first creating the monitor, correctly set its property value to the
value from the portal, rather than waiting for the portal value to
change to set it.

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

Fixes: #2481
2021-09-06 18:56:12 +01:00
Philip Withnall
a37b9d8652 gpowerprofilemonitordbus: Fix a crash if no property is cached
It’s not always guaranteed that a property is cached, so handle the case
when it isn’t.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-06 18:55:04 +01:00
Philip Withnall
28ad07373a gpowerprofilemonitordbus: Fix a memory leak
get_cached_property() returns a new reference.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-09-06 18:54:06 +01:00