mirror of
https://github.com/iDescriptor/iDescriptor.git
synced 2026-06-21 19:35:49 +08:00
use stack allocated std::recursive_mutex
This commit is contained in:
+4
-8
@@ -104,7 +104,6 @@ void AppContext::addDevice(QString udid, idevice_connection_type conn_type,
|
||||
.deviceInfo = initResult.deviceInfo,
|
||||
.afcClient = initResult.afcClient,
|
||||
.afc2Client = initResult.afc2Client,
|
||||
.mutex = new std::recursive_mutex(),
|
||||
};
|
||||
m_devices[device->udid] = device;
|
||||
if (addType == AddType::Regular) {
|
||||
@@ -172,14 +171,15 @@ void AppContext::removeDevice(QString _udid)
|
||||
emit deviceRemoved(udid);
|
||||
emit deviceChange();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
if (device->afcClient)
|
||||
afc_client_free(device->afcClient);
|
||||
if (device->afc2Client)
|
||||
afc_client_free(device->afc2Client);
|
||||
|
||||
idevice_free(device->device);
|
||||
delete device->mutex;
|
||||
|
||||
delete device;
|
||||
}
|
||||
|
||||
@@ -201,8 +201,7 @@ void AppContext::removeRecoveryDevice(uint64_t ecid)
|
||||
emit recoveryDeviceRemoved(ecid);
|
||||
emit deviceChange();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*deviceInfo->mutex);
|
||||
delete deviceInfo->mutex;
|
||||
std::lock_guard<std::recursive_mutex> lock(deviceInfo->mutex);
|
||||
delete deviceInfo;
|
||||
}
|
||||
#endif
|
||||
@@ -254,7 +253,6 @@ void AppContext::addRecoveryDevice(uint64_t ecid)
|
||||
recoveryDevice->cpid = res.deviceInfo.cpid;
|
||||
recoveryDevice->bdid = res.deviceInfo.bdid;
|
||||
recoveryDevice->displayName = res.displayName;
|
||||
recoveryDevice->mutex = new std::recursive_mutex();
|
||||
|
||||
m_recoveryDevices[res.deviceInfo.ecid] = recoveryDevice;
|
||||
emit recoveryDeviceAdded(recoveryDevice);
|
||||
@@ -271,14 +269,12 @@ AppContext::~AppContext()
|
||||
if (device->afc2Client)
|
||||
afc_client_free(device->afc2Client);
|
||||
idevice_free(device->device);
|
||||
delete device->mutex;
|
||||
delete device;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_RECOVERY_DEVICE_SUPPORT
|
||||
for (auto recoveryDevice : m_recoveryDevices) {
|
||||
emit recoveryDeviceRemoved(recoveryDevice->ecid);
|
||||
delete recoveryDevice->mutex;
|
||||
delete recoveryDevice;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -280,11 +280,6 @@ void DeviceManagerWidget::removeDevice(const std::string &uuid)
|
||||
m_stackedWidget->removeWidget(deviceWidget);
|
||||
m_sidebar->removeDevice(uuid);
|
||||
deviceWidget->deleteLater();
|
||||
|
||||
// // TODO:
|
||||
// if (m_deviceWidgets.count() > 0) {
|
||||
// setCurrentDevice(m_deviceWidgets.firstKey());
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ QUuid ExportManager::startExport(iDescriptorDevice *device,
|
||||
const QString &destinationPath,
|
||||
std::optional<afc_client_t> altAfc)
|
||||
{
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
qWarning() << "Invalid device provided to ExportManager";
|
||||
return QUuid();
|
||||
}
|
||||
|
||||
+2
-2
@@ -184,7 +184,7 @@ struct iDescriptorDevice {
|
||||
afc_client_t afcClient;
|
||||
afc_client_t afc2Client;
|
||||
bool is_iPhone;
|
||||
std::recursive_mutex *mutex;
|
||||
std::recursive_mutex mutex;
|
||||
};
|
||||
|
||||
struct iDescriptorInitDeviceResult {
|
||||
@@ -202,7 +202,7 @@ struct iDescriptorRecoveryDevice {
|
||||
uint32_t cpid;
|
||||
uint32_t bdid;
|
||||
std::string displayName;
|
||||
std::recursive_mutex *mutex;
|
||||
std::recursive_mutex mutex;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
+10
-10
@@ -43,11 +43,11 @@ public:
|
||||
std::function<T(afc_client_t)> operation,
|
||||
std::optional<afc_client_t> altAfc = std::nullopt)
|
||||
{
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
return T{}; // Return default-constructed value for the type
|
||||
}
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
// Double-check device is still valid after acquiring lock
|
||||
if (!device->afcClient) {
|
||||
@@ -70,11 +70,11 @@ public:
|
||||
std::function<T()> operation,
|
||||
std::optional<afc_client_t> altAfc = std::nullopt)
|
||||
{
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
return T{}; // Return default-constructed value for the type
|
||||
}
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
// Double-check device is still valid after acquiring lock
|
||||
if (!device->afcClient) {
|
||||
@@ -94,11 +94,11 @@ public:
|
||||
std::function<T()> operation, T failureValue,
|
||||
std::optional<afc_client_t> altAfc = std::nullopt)
|
||||
{
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
return failureValue;
|
||||
}
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
// Double-check device is still valid after acquiring lock
|
||||
if (!device->afcClient) {
|
||||
@@ -118,11 +118,11 @@ public:
|
||||
executeOperation(iDescriptorDevice *device, std::function<void()> operation,
|
||||
std::optional<afc_client_t> altAfc = std::nullopt)
|
||||
{
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
// Double-check device is still valid after acquiring lock
|
||||
if (!device->afcClient) {
|
||||
@@ -144,11 +144,11 @@ public:
|
||||
std::optional<afc_client_t> altAfc = std::nullopt)
|
||||
{
|
||||
try {
|
||||
if (!device || !device->mutex) {
|
||||
if (!device) {
|
||||
return AFC_E_UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lock(*device->mutex);
|
||||
std::lock_guard<std::recursive_mutex> lock(device->mutex);
|
||||
|
||||
// Double-check device is still valid after acquiring lock
|
||||
if (!device->afcClient) {
|
||||
|
||||
Reference in New Issue
Block a user