mirror of
https://github.com/godotengine/godot
synced 2024-09-16 03:17:53 +00:00
[TextServer] Make free
calls thread safe.
This commit is contained in:
parent
b29bb11a4c
commit
a28e8f0c8d
|
@ -385,11 +385,17 @@ void TextServerAdvanced::_free_rid(const RID &p_rid) {
|
||||||
_THREAD_SAFE_METHOD_
|
_THREAD_SAFE_METHOD_
|
||||||
if (font_owner.owns(p_rid)) {
|
if (font_owner.owns(p_rid)) {
|
||||||
FontAdvanced *fd = font_owner.get_or_null(p_rid);
|
FontAdvanced *fd = font_owner.get_or_null(p_rid);
|
||||||
font_owner.free(p_rid);
|
{
|
||||||
|
MutexLock lock(fd->mutex);
|
||||||
|
font_owner.free(p_rid);
|
||||||
|
}
|
||||||
memdelete(fd);
|
memdelete(fd);
|
||||||
} else if (shaped_owner.owns(p_rid)) {
|
} else if (shaped_owner.owns(p_rid)) {
|
||||||
ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_rid);
|
ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_rid);
|
||||||
shaped_owner.free(p_rid);
|
{
|
||||||
|
MutexLock lock(sd->mutex);
|
||||||
|
shaped_owner.free(p_rid);
|
||||||
|
}
|
||||||
memdelete(sd);
|
memdelete(sd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,11 +115,17 @@ void TextServerFallback::_free_rid(const RID &p_rid) {
|
||||||
_THREAD_SAFE_METHOD_
|
_THREAD_SAFE_METHOD_
|
||||||
if (font_owner.owns(p_rid)) {
|
if (font_owner.owns(p_rid)) {
|
||||||
FontFallback *fd = font_owner.get_or_null(p_rid);
|
FontFallback *fd = font_owner.get_or_null(p_rid);
|
||||||
font_owner.free(p_rid);
|
{
|
||||||
|
MutexLock lock(fd->mutex);
|
||||||
|
font_owner.free(p_rid);
|
||||||
|
}
|
||||||
memdelete(fd);
|
memdelete(fd);
|
||||||
} else if (shaped_owner.owns(p_rid)) {
|
} else if (shaped_owner.owns(p_rid)) {
|
||||||
ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_rid);
|
ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_rid);
|
||||||
shaped_owner.free(p_rid);
|
{
|
||||||
|
MutexLock lock(sd->mutex);
|
||||||
|
shaped_owner.free(p_rid);
|
||||||
|
}
|
||||||
memdelete(sd);
|
memdelete(sd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue