YYCache icon indicating copy to clipboard operation
YYCache copied to clipboard

YYKVStorage 异常crash

Open sanshanchuns opened this issue 8 years ago • 8 comments

hey, ibireme 调用堆栈如下,什么样的情况会引起这种崩溃呢?本机无法复现,可线上却一直报错

SIGSEGV SEGV_ACCERR 0 libsqlite3.dylib 0x0000000195c2a6e4 sqlite3_bind_int + 18448 1 libsqlite3.dylib 0x0000000195c2a638 sqlite3_bind_int + 18276 2 libsqlite3.dylib 0x0000000195bebbf8 sqlite3_log + 22556 3 libsqlite3.dylib 0x0000000195bcdad8 sqlite3_exec + 12240 4 libsqlite3.dylib 0x0000000195bccba0 sqlite3_exec + 8344 5 libsqlite3.dylib 0x0000000195bcbe14 sqlite3_exec + 4876 6 libsqlite3.dylib 0x0000000195bcb66c sqlite3_exec + 2916 7 libsqlite3.dylib 0x0000000195bcb314 sqlite3_exec + 2060 8 0x000000010043b2e4 -YYKVStorage _dbPrepareStmt: 9 0x000000010043cf8c -YYKVStorage _dbGetItemCountWithKey: 10 0x000000010043f9b8 -YYKVStorage itemExistsForKey: 11 0x00000001004604a4 -YYDiskCache containsObjectForKey: 12 0x00000001004031b0 -YYCache containsObjectForKey:

sanshanchuns avatar Aug 23 '16 02:08 sanshanchuns

能提供一下 YYCache 版本和其他详细情况吗?这个暂时看不出来。。

ibireme avatar Aug 25 '16 07:08 ibireme

这个应该是创建了相同路径的YYKVStorage对象,然后多线程同时访问导致的,我们之前也遇到了一样的问题。建议加下数据库访问锁。

jaminzzhang avatar Sep 15 '16 03:09 jaminzzhang

957d4d3d-fa11-42f0-9b95-b9e9ba9d9f81

@ibireme 我 YYCache 都是单例,也出现这个错误了,YYCache (1.0.4)

li6185377 avatar Nov 11 '16 07:11 li6185377

@li6185377 我也是报这个错误,请问您是怎么解决这个问题的?

luzsyn avatar Jan 08 '19 02:01 luzsyn

这个问题主要是因为在创建了多个相同路径YYCache实例,当这两个实例分别在不同线程去访问时,两个实例的锁相互不影响,就会访问同一个路径下的db文件,导致了Crash。两种方法:

  1. 检查初始化代码,不要创建多个同路径的YYCache。
  2. 在YYKVStorage的初始化代码里面做检查,发现之前已经创建了相同路径的实例。

jaminzzhang avatar Jan 09 '19 10:01 jaminzzhang

@jaminzzhang 我是用的懒加载的属性,讲道理不会创建多个同路径的YYCache吧?

  • (YYDiskCache *)momentCache { if (!_momentCache) { _momentCache = [[YYDiskCache alloc] initWithPath:[NSString stringWithFormat:@"%@/Library/Caches", NSHomeDirectory()]]; } return _momentCache; }

luzsyn avatar Jan 09 '19 10:01 luzsyn

@bsyqc163 这个单例不标准啊,没有加锁,多线程访问有可能会创建多个。加锁试试,另外如果本地无法复现的话,建议加下日志,在Crash的时候上报是否创建了多个YYKVStorage

jaminzzhang avatar Jan 10 '19 03:01 jaminzzhang

@jaminzzhang 好的,我试试,谢谢哈

luzsyn avatar Jan 10 '19 03:01 luzsyn