Fix HTTPClient reset() behaviour

Ensure all data members are correctly re-initialzied when doing a reset.

This shoed up as negative ‘bytes downloaded’ counts after a TerraSync
abandon and retry.
This commit is contained in:
James Turner 2021-02-05 10:37:07 +00:00
parent 059285ed6f
commit be49f880b8

View File

@ -81,21 +81,8 @@ void Client::ClientPrivate::createCurlMulti() {
#endif #endif
} }
Client::Client() : Client::Client()
d(new ClientPrivate)
{ {
d->proxyPort = 0;
d->maxConnections = 4;
d->maxHostConnections = 4;
d->bytesTransferred = 0;
d->lastTransferRate = 0;
d->timeTransferSample.stamp();
d->totalBytesDownloaded = 0;
d->maxPipelineDepth = 5;
setUserAgent("SimGear-" SG_STRINGIZE(SIMGEAR_VERSION));
d->tlsCertificatePath = SGPath::fromEnv("SIMGEAR_TLS_CERT_PATH");
static bool didInitCurlGlobal = false; static bool didInitCurlGlobal = false;
static std::mutex initMutex; static std::mutex initMutex;
@ -105,7 +92,7 @@ Client::Client() :
didInitCurlGlobal = true; didInitCurlGlobal = true;
} }
d->createCurlMulti(); reset();
} }
Client::~Client() Client::~Client()
@ -139,8 +126,21 @@ void Client::setMaxPipelineDepth(unsigned int depth)
void Client::reset() void Client::reset()
{ {
if (d.get()) {
curl_multi_cleanup(d->curlMulti); curl_multi_cleanup(d->curlMulti);
}
d.reset(new ClientPrivate); d.reset(new ClientPrivate);
d->proxyPort = 0;
d->maxConnections = 4;
d->maxHostConnections = 4;
d->bytesTransferred = 0;
d->lastTransferRate = 0;
d->timeTransferSample.stamp();
d->totalBytesDownloaded = 0;
d->maxPipelineDepth = 5;
setUserAgent("SimGear-" SG_STRINGIZE(SIMGEAR_VERSION));
d->tlsCertificatePath = SGPath::fromEnv("SIMGEAR_TLS_CERT_PATH"); d->tlsCertificatePath = SGPath::fromEnv("SIMGEAR_TLS_CERT_PATH");
d->createCurlMulti(); d->createCurlMulti();
} }