mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-02 03:12:12 +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"
|
#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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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(); }
|
||||||
|
|
||||||
|
@ -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)) {}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user