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

View File

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

View File

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

View File

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

View File

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

View File

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