android/usb: better memory management

Instead of relying on the std::vector staying unchanged and not freeing
its members, instead keep a copy of the object in our DCDeviceData class.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2020-03-15 15:12:30 -07:00
parent 0b72495413
commit 2265a27912
3 changed files with 12 additions and 4 deletions

View file

@ -324,9 +324,10 @@ void DCDeviceData::setDevName(const QString &devName)
}
#if defined(Q_OS_ANDROID)
void DCDeviceData::setUsbDevice(void *device)
void DCDeviceData::setUsbDevice(const android_usb_serial_device_descriptor &usbDescriptor)
{
data.androidUsbDeviceDescriptor = device;
androidUsbDescriptor = usbDescriptor;
data.androidUsbDeviceDescriptor = &androidUsbDescriptor;
}
#endif

View file

@ -12,6 +12,10 @@
#if BT_SUPPORT
#include "core/btdiscovery.h"
#endif
#if defined(Q_OS_ANDROID)
#include "core/serial_usb_android.h"
#endif
/* Helper object for access of Device Data in QML */
class DCDeviceData {
public:
@ -50,9 +54,12 @@ public:
void setSaveDump(bool dumpMode);
void setSaveLog(bool saveLog);
#if defined(Q_OS_ANDROID)
void setUsbDevice(void *device);
void setUsbDevice(const android_usb_serial_device_descriptor &usbDescriptor);
#endif
private:
#if defined(Q_OS_ANDROID)
struct android_usb_serial_device_descriptor androidUsbDescriptor;
#endif
device_data_t data;
// Bluetooth name is managed outside of libdivecomputer

View file

@ -2024,7 +2024,7 @@ void QMLManager::DC_setDevName(const QString& devName)
for (unsigned int i = 0; i < androidSerialDevices.size(); i++) {
if (androidSerialDevices[i].uiRepresentation == connection) {
appendTextToLog(QString("setDevName matches USB device %1").arg(i));
DCDeviceData::instance()->setUsbDevice((void *)&androidSerialDevices[i]);
DCDeviceData::instance()->setUsbDevice(androidSerialDevices[i]);
}
}
#endif