mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Concurrency] Fix arm64e ptrauth violations in Embedded Swift Concurrency
This commit is contained in:
@@ -1782,9 +1782,14 @@ void DefaultActorImpl::deallocate() {
|
||||
void DefaultActorImpl::deallocateUnconditional() {
|
||||
concurrency::trace::actor_deallocate(this);
|
||||
|
||||
#if !SWIFT_CONCURRENCY_EMBEDDED
|
||||
auto metadata = cast<ClassMetadata>(this->metadata);
|
||||
swift_deallocClassInstance(this, metadata->getInstanceSize(),
|
||||
metadata->getInstanceAlignMask());
|
||||
#else
|
||||
// Embedded Swift's runtime doesn't actually use the size/mask values.
|
||||
swift_deallocClassInstance(this, 0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool DefaultActorImpl::tryLock(bool asDrainer) {
|
||||
@@ -2107,12 +2112,16 @@ static bool isDefaultActorClass(const ClassMetadata *metadata) {
|
||||
}
|
||||
|
||||
void swift::swift_defaultActor_deallocateResilient(HeapObject *actor) {
|
||||
#if !SWIFT_CONCURRENCY_EMBEDDED
|
||||
auto metadata = cast<ClassMetadata>(actor->metadata);
|
||||
if (isDefaultActorClass(metadata))
|
||||
return swift_defaultActor_deallocate(static_cast<DefaultActor*>(actor));
|
||||
|
||||
swift_deallocObject(actor, metadata->getInstanceSize(),
|
||||
metadata->getInstanceAlignMask());
|
||||
#else
|
||||
return swift_defaultActor_deallocate(static_cast<DefaultActor*>(actor));
|
||||
#endif
|
||||
}
|
||||
|
||||
/// FIXME: only exists for the quick-and-dirty MainActor implementation.
|
||||
@@ -2546,12 +2555,16 @@ swift::swift_distributedActor_remote_initialize(const Metadata *actorType) {
|
||||
}
|
||||
|
||||
bool swift::swift_distributed_actor_is_remote(HeapObject *_actor) {
|
||||
#if !SWIFT_CONCURRENCY_EMBEDDED
|
||||
const ClassMetadata *metadata = cast<ClassMetadata>(_actor->metadata);
|
||||
if (isDefaultActorClass(metadata)) {
|
||||
return asImpl(reinterpret_cast<DefaultActor *>(_actor))->isDistributedRemote();
|
||||
} else {
|
||||
return asImpl(reinterpret_cast<NonDefaultDistributedActor *>(_actor))->isDistributedRemote();
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool DefaultActorImpl::isDistributedRemote() {
|
||||
|
||||
Reference in New Issue
Block a user