1
0
mirror of https://github.com/apple/foundationdb.git synced 2025-05-31 18:19:35 +08:00

Fix SEGFAULT in call to ReadYourWritesTransaction::preinitializeOnForeignThread

This commit is contained in:
sfc-gh-tclinkenbeard 2021-05-10 15:33:44 -07:00
parent 121c48359d
commit f7f4595d90
5 changed files with 11 additions and 18 deletions

@ -24,20 +24,17 @@
#include "fdbclient/SimpleConfigTransaction.h"
ISingleThreadTransaction* ISingleThreadTransaction::allocateOnForeignThread(Type type) {
ISingleThreadTransaction* tr;
switch (type) {
case Type::RYW:
tr = (ReadYourWritesTransaction*)(ReadYourWritesTransaction::operator new(sizeof(ReadYourWritesTransaction)));
break;
case Type::SIMPLE_CONFIG:
tr = (SimpleConfigTransaction*)(SimpleConfigTransaction::operator new(sizeof(SimpleConfigTransaction)));
break;
default:
ASSERT(false);
return nullptr;
if (type == Type::RYW) {
auto tr =
(ReadYourWritesTransaction*)(ReadYourWritesTransaction::operator new(sizeof(ReadYourWritesTransaction)));
tr->preinitializeOnForeignThread();
return tr;
} else if (type == Type::SIMPLE_CONFIG) {
auto tr = (SimpleConfigTransaction*)(SimpleConfigTransaction::operator new(sizeof(SimpleConfigTransaction)));
return tr;
}
tr->preinitializeOnForeignThread();
return tr;
ASSERT(false);
return nullptr;
}
void ISingleThreadTransaction::create(ISingleThreadTransaction* tr, Type type, Database db) {

@ -79,7 +79,6 @@ public:
virtual void debugTransaction(UID dID) = 0;
virtual void checkDeferredError() = 0;
virtual void getWriteConflicts(KeyRangeMap<bool>* result) = 0;
virtual void preinitializeOnForeignThread() = 0;
// Used by ThreadSafeTransaction for exceptions thrown in void methods
Error deferredError;

@ -152,7 +152,7 @@ public:
void getWriteConflicts(KeyRangeMap<bool>* result) override;
void preinitializeOnForeignThread() override;
void preinitializeOnForeignThread();
Database getDatabase() const { return tr.getDatabase(); }

@ -215,8 +215,6 @@ void SimpleConfigTransaction::checkDeferredError() {
void SimpleConfigTransaction::getWriteConflicts(KeyRangeMap<bool>* result) {}
void SimpleConfigTransaction::preinitializeOnForeignThread() {}
SimpleConfigTransaction::SimpleConfigTransaction(ClusterConnectionString const& ccs)
: impl(std::make_unique<SimpleConfigTransactionImpl>(ccs)) {}

@ -80,6 +80,5 @@ public:
void debugTransaction(UID dID) override;
void checkDeferredError() override;
void getWriteConflicts(KeyRangeMap<bool>* result) override;
void preinitializeOnForeignThread() override;
void fullReset();
};