diff --git a/Tests/FMDatabaseQueueTests.m b/Tests/FMDatabaseQueueTests.m index 81e0b342..67e39751 100644 --- a/Tests/FMDatabaseQueueTests.m +++ b/Tests/FMDatabaseQueueTests.m @@ -369,4 +369,24 @@ - (void)testClose }]; } +- (void)testResultSetDealloc +{ + [self.queue inDatabase:^(FMDatabase * _Nonnull db) { + [db executeUpdate:@"create table if not exists test (a text, b text, c text, d text)"]; + for (int i = 0; i < 10; i++) { + [db executeUpdate:@"insert into test (a, b, c, d) values ('1', '1', '1','1')"]; + } + }]; + + size_t ops = 10; + + dispatch_queue_t dqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + dispatch_apply(ops, dqueue, ^(size_t nby) { + [self.queue inDatabase:^(FMDatabase *db) { + [db executeQuery:@"select * from test"]; + }]; + }); +} + @end diff --git a/src/fmdb/FMDatabaseQueue.m b/src/fmdb/FMDatabaseQueue.m index 2799c70e..e74ff97a 100755 --- a/src/fmdb/FMDatabaseQueue.m +++ b/src/fmdb/FMDatabaseQueue.m @@ -195,6 +195,7 @@ - (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block { if ([db hasOpenResultSets]) { NSLog(@"Warning: there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]"); + [db closeOpenResultSets]; #if defined(DEBUG) && DEBUG NSSet *openSetCopy = FMDBReturnAutoreleased([[db valueForKey:@"_openResultSets"] copy]);