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:
parent
121c48359d
commit
f7f4595d90
@ -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();
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user