Fix data race in fdb_get_server_protocol

This commit is contained in:
Andrew Noyes 2021-03-17 01:32:48 +00:00
parent 85d3e2fee5
commit 0919eff187
2 changed files with 9 additions and 4 deletions

View File

@ -1511,12 +1511,16 @@ TEST_CASE("fdb_transaction_get_approximate_size") {
}
TEST_CASE("fdb_get_server_protocol") {
// We don't really have any expectations other than "don't crash" here
FDBFuture* protocolFuture = fdb_get_server_protocol(clusterFilePath.c_str());
uint64_t out;
fdb_check(fdb_future_block_until_ready(protocolFuture));
fdb_check(fdb_future_get_uint64(protocolFuture, &out));
fdb_future_destroy(protocolFuture);
// "Default" cluster file version
fdb_future_destroy(fdb_get_server_protocol(nullptr));
}
TEST_CASE("fdb_transaction_watch read_your_writes_disable") {

View File

@ -402,10 +402,11 @@ const char* ThreadSafeApi::getClientVersion() {
}
ThreadFuture<uint64_t> ThreadSafeApi::getServerProtocol(const char* clusterFilePath) {
auto [clusterFile, isDefault] = ClusterConnectionFile::lookupClusterFileName(std::string(clusterFilePath));
Reference<ClusterConnectionFile> f = Reference<ClusterConnectionFile>(new ClusterConnectionFile(clusterFile));
return onMainThread([f]() -> Future<uint64_t> { return getCoordinatorProtocols(f); });
return onMainThread([clusterFilePath = std::string(clusterFilePath)]() -> Future<uint64_t> {
auto [clusterFile, isDefault] = ClusterConnectionFile::lookupClusterFileName(clusterFilePath);
Reference<ClusterConnectionFile> f = Reference<ClusterConnectionFile>(new ClusterConnectionFile(clusterFile));
return getCoordinatorProtocols(f);
});
}
void ThreadSafeApi::setNetworkOption(FDBNetworkOptions::Option option, Optional<StringRef> value) {