调用CacheFactory.GetCache时抛出LockRecursionException

时间:2013-07-16 14:20:08

标签: c# oracle-coherence

我遇到了一个非常烦人的问题。我正在尝试编写一个简单的WinForm应用程序来显示Oracle Coherence缓存的内容。

由于某些原因,当我致电LockRecursionException时,CacheFactory.GetCache("cacheName")会被抛出。

  

保持读锁定可能无法获取写锁定。这种模式容易出现死锁。请确保在执行写锁定之前释放读锁定。如果需要升级,请使用升级锁代替读锁。

堆栈跟踪是:

at System.Threading.ReaderWriterLockSlim.TryEnterWriteLockCore(Int32 millisecondsTimeout)   
at System.Threading.ReaderWriterLockSlim.TryEnterWriteLock(Int32 millisecondsTimeout)  
at Tangosol.Util.ThreadGateSlim.Close(Int64 millis) in c:\hudson\workspace\Coh-NET-3.7.1\dev\release.net\coherence-net-v3.7.1\src\Coherence\Util\ThreadGateSlim.cs:line 26

我在表单构造函数中放置了以下代码,以及按钮单击事件处理程序,但仍然抛出异常。之前没有其他任何东西被称为:

using (var cache = CacheFactory.GetCache("cacheName"))
{
    ...get data from cache
}

有没有人遇到过这个?我使用的是.Net 4.0和Coherence 3.7.1.5。相同的代码在一个单独的(更复杂的项目)中工作正常,所以我不确定出了什么问题。

1 个答案:

答案 0 :(得分:2)

我建议在发生这种情况时查看所有线程。我想知道在调用表单构造函数的线程中是否有更深入调用Coherence的东西,例如。

- 更新 -

来自Patrick Fry(此特色领域的首席工程师):

  

此Coherence + .NET 4.0问题已在Coherence for .NET中得到解决   3.7.1.7修订COH-8044 JIRA没有具体提到锁定问题但是有一个特别提到的错误   问题,它被复制了COH-8044。

     

https://bug.oraclecorp.com/pls/bug/webbug_print.show?c_rptno=14732333

     

我们应该在3.7.1.7的补丁自述文件中提到这一点   特别的问题也得到了解决。