@@ -1272,6 +1272,14 @@ -(BOOL)setParent:(NSInteger)newParentID forFolder:(NSInteger)folderId
1272
1272
parentFolder = [self folderFromID: parentFolder.parentId];
1273
1273
}
1274
1274
1275
+ __block BOOL success = NO ;
1276
+ [self .databaseQueue inDatabase: ^(FMDatabase *db) {
1277
+ success = [db executeStatements: @" PRAGMA locking_mode = EXCLUSIVE;" ];
1278
+ }];
1279
+ if (!success) {
1280
+ return NO ;
1281
+ }
1282
+
1275
1283
// Adjust the child unread count for the old parent.
1276
1284
NSInteger adjustment = 0 ;
1277
1285
if (folder.type == VNAFolderTypeRSS || folder.type == VNAFolderTypeOpenReader) {
@@ -1305,6 +1313,7 @@ -(BOOL)setParent:(NSInteger)newParentID forFolder:(NSInteger)folderId
1305
1313
[queue inDatabase: ^(FMDatabase *db) {
1306
1314
[db executeUpdate: @" UPDATE folders SET parent_id=? WHERE folder_id=?" ,
1307
1315
@(newParentID), @(folderId)];
1316
+ [db executeStatements: @" PRAGMA locking_mode = NORMAL;" ];
1308
1317
}];
1309
1318
return YES ;
1310
1319
}
@@ -1323,7 +1332,9 @@ -(BOOL)setFirstChild:(NSInteger)childId forFolder:(NSInteger)folderId
1323
1332
1324
1333
if (folderId == VNAFolderTypeRoot) {
1325
1334
[queue inDatabase: ^(FMDatabase *db) {
1335
+ [db executeStatements: @" PRAGMA locking_mode = EXCLUSIVE" ];
1326
1336
[db executeUpdate: @" UPDATE info SET first_folder=?" , @(childId)];
1337
+ [db executeStatements: @" PRAGMA locking_mode = NORMAL;" ];
1327
1338
}];
1328
1339
} else {
1329
1340
Folder * folder = [self folderFromID: folderId];
@@ -1333,8 +1344,10 @@ -(BOOL)setFirstChild:(NSInteger)childId forFolder:(NSInteger)folderId
1333
1344
1334
1345
folder.firstChildId = childId;
1335
1346
[queue inDatabase: ^(FMDatabase *db) {
1347
+ [db executeStatements: @" PRAGMA locking_mode = EXCLUSIVE;" ];
1336
1348
[db executeUpdate: @" UPDATE folders SET first_child=? WHERE folder_id=?" ,
1337
1349
@(childId), @(folderId)];
1350
+ [db executeStatements: @" PRAGMA locking_mode = NORMAL;" ];
1338
1351
}];
1339
1352
}
1340
1353
@@ -1356,12 +1369,21 @@ -(BOOL)setNextSibling:(NSUInteger)nextSiblingId forFolder:(NSInteger)folderId
1356
1369
return NO ;
1357
1370
}
1358
1371
1372
+ __block BOOL success = NO ;
1373
+ [self .databaseQueue inDatabase: ^(FMDatabase *db) {
1374
+ success = [db executeStatements: @" PRAGMA locking_mode = EXCLUSIVE;" ];
1375
+ }];
1376
+ if (!success) {
1377
+ return NO ;
1378
+ }
1379
+
1359
1380
folder.nextSiblingId = nextSiblingId;
1360
1381
1361
1382
FMDatabaseQueue *queue = self.databaseQueue ;
1362
1383
[queue inDatabase: ^(FMDatabase *db) {
1363
1384
[db executeUpdate: @" UPDATE folders SET next_sibling=? WHERE folder_id=?" ,
1364
1385
@(nextSiblingId), @(folderId)];
1386
+ [db executeStatements: @" PRAGMA locking_mode = NORMAL;" ];
1365
1387
}];
1366
1388
1367
1389
return YES ;
@@ -1867,6 +1889,7 @@ -(void)initFolderArray
1867
1889
FMDatabaseQueue *queue = self.databaseQueue ;
1868
1890
1869
1891
[queue inTransaction: ^(FMDatabase *db, BOOL *rollback) {
1892
+ [db executeStatements: @" PRAGMA locking_mode = EXCLUSIVE;" ];
1870
1893
FMResultSet * results = [db executeQuery: @" SELECT folder_id, parent_id, foldername, unread_count, last_update,"
1871
1894
@" type, flags, next_sibling, first_child FROM folders ORDER BY folder_id" ];
1872
1895
if (!results) {
@@ -1934,6 +1957,7 @@ -(void)initFolderArray
1934
1957
folder.remoteId = remoteId;
1935
1958
}
1936
1959
[results close ];
1960
+ [db executeStatements: @" PRAGMA locking_mode = NORMAL;" ];
1937
1961
}];
1938
1962
// Fix the childUnreadCount for every parent
1939
1963
for (Folder * folder in [self .foldersDict objectEnumerator ]) {
0 commit comments