mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-31 12:53:07 +02:00
gbitlock: don't assume sizeof(gsize) == sizeof(gpointer)
Use a gpointer* instead of a gsize* as the g_atomic_pointer_* argument. This is required for architectures such as Arm Morello where gsize is 64 bits but gpointer is 128 bits. Helps: https://gitlab.gnome.org/GNOME/glib/-/issues/2842
This commit is contained in:
parent
f7d2a58be6
commit
877c575cd9
@ -424,7 +424,7 @@ void
|
|||||||
|
|
||||||
contended:
|
contended:
|
||||||
{
|
{
|
||||||
gsize *pointer_address = address_nonvolatile;
|
gpointer *pointer_address = address_nonvolatile;
|
||||||
gsize mask = 1u << lock_bit;
|
gsize mask = 1u << lock_bit;
|
||||||
gsize v;
|
gsize v;
|
||||||
|
|
||||||
@ -440,9 +440,9 @@ void
|
|||||||
}
|
}
|
||||||
goto retry;
|
goto retry;
|
||||||
#else
|
#else
|
||||||
gsize *pointer_address = address_nonvolatile;
|
gpointer *pointer_address = address_nonvolatile;
|
||||||
gsize mask = 1u << lock_bit;
|
gsize mask = 1u << lock_bit;
|
||||||
gsize v;
|
guintptr v;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
v = g_atomic_pointer_or (pointer_address, mask);
|
v = g_atomic_pointer_or (pointer_address, mask);
|
||||||
@ -499,15 +499,15 @@ gboolean
|
|||||||
return result;
|
return result;
|
||||||
#else
|
#else
|
||||||
void *address_nonvolatile = (void *) address;
|
void *address_nonvolatile = (void *) address;
|
||||||
gsize *pointer_address = address_nonvolatile;
|
gpointer *pointer_address = address_nonvolatile;
|
||||||
gsize mask = 1u << lock_bit;
|
gsize mask = 1u << lock_bit;
|
||||||
gsize v;
|
guintptr v;
|
||||||
|
|
||||||
g_return_val_if_fail (lock_bit < 32, FALSE);
|
g_return_val_if_fail (lock_bit < 32, FALSE);
|
||||||
|
|
||||||
v = g_atomic_pointer_or (pointer_address, mask);
|
v = g_atomic_pointer_or (pointer_address, mask);
|
||||||
|
|
||||||
return ~v & mask;
|
return (~(gsize) v & mask) != 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -543,7 +543,7 @@ void
|
|||||||
: "r" (address), "r" ((gsize) lock_bit)
|
: "r" (address), "r" ((gsize) lock_bit)
|
||||||
: "cc", "memory");
|
: "cc", "memory");
|
||||||
#else
|
#else
|
||||||
gsize *pointer_address = address_nonvolatile;
|
gpointer *pointer_address = address_nonvolatile;
|
||||||
gsize mask = 1u << lock_bit;
|
gsize mask = 1u << lock_bit;
|
||||||
|
|
||||||
g_atomic_pointer_and (pointer_address, ~mask);
|
g_atomic_pointer_and (pointer_address, ~mask);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user