Skip to content

Commit

Permalink
Merge 'checkupdate-destructor'
Browse files Browse the repository at this point in the history
  • Loading branch information
tatokis committed Sep 5, 2017
2 parents 6af2773 + b9ed55f commit d65d782
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 13 deletions.
15 changes: 6 additions & 9 deletions src/ckb/kbfirmware.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,18 @@ KbFirmware::FW::FW() : fwVersion(0.f), ckbVersion(0.f) {}
KbFirmware::KbFirmware() :
lastCheck(0), lastFinished(0), networkManager(0), tableDownload(0), hasGPG(UNKNOWN)
{
// Disable bearer polling. This corrects an issue with latency spikes when
// using WiFi. The problem and workaround are described here:
// https://lostdomain.org/2017/06/17/qt-qnetworkaccessmanager-causing-latency-spikes-on-wifi/
qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1));
networkManager = new QNetworkAccessManager();
}

KbFirmware::~KbFirmware(){
//delete networkManager;
// ^ This can cause a crash (QT bug?)
}

void KbFirmware::initManager(){
if(networkManager)
return;
networkManager = new QNetworkAccessManager();
delete networkManager;
}

bool KbFirmware::_checkUpdates(){
initManager();
quint64 now = QDateTime::currentMSecsSinceEpoch();
if(now < lastCheck + AUTO_CHECK_TIME)
return false;
Expand Down
7 changes: 3 additions & 4 deletions src/ckb/kbfirmware.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class KbFirmware : public QObject
// Downloads and extracts the latest firmware for a keyboard. Returns an empty array on failure.
static inline QByteArray dataForBoard(const QString& features) { return instance._fileForBoard(features); }

// Network manager object to use with QtNetwork
QNetworkAccessManager* networkManager;

private:
KbFirmware();
~KbFirmware();
Expand All @@ -42,10 +45,6 @@ class KbFirmware : public QObject
// SHA256 of last downloaded table (redundancy check)
QByteArray fwTableHash;

// Network manager for downloading updates
// It can't be declared as part of the object or it will misbehave. Has to be initialized on use.
QNetworkAccessManager* networkManager;
void initManager();
// Current FW table download (null if nothing downloading)
QNetworkReply* tableDownload;

Expand Down

0 comments on commit d65d782

Please sign in to comment.