use stack allocated std::recursive_mutex

This commit is contained in:
uncor3
2026-01-31 07:28:47 -05:00
parent b2d76ac482
commit c63686dc9e
5 changed files with 17 additions and 26 deletions
+4 -8
View File
@@ -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
-5
View File
@@ -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());
// }
}
}
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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) {