Contents
  1. 1. FMDB-死锁问题

FMDB-死锁问题

1
2
3
4
5
6
7
8
9
10
11
12
13
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {    
            [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];    
            [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];    
            [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];  
    [queue inDatabase:^(FMDatabase *db) {
        // do work B
    }];
            if (whoopsSomethingWrongHappened) {    
                    *rollback = YES; return;    
            }   
            // etc…    
            [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];    
    }];
  • 使用fmdb进行数据库操作,出现inDatabase: was called reentrantly on the same queue, which would lead to a deadlock这样的崩溃错误.原因是在一个[queue inDataBase]的block中,又执行了一个inDataBase.这时第一个block需要执行结束才能出队列,第二个block才能执行.但是第一个block又包含了第二个block,也就是说第二个block不执行,第一个block就不能结束.于是就互相等待,也就是各种死锁
Contents
  1. 1. FMDB-死锁问题