From: <mar...@us...> - 2011-05-12 12:43:01
|
Revision: 4488 http://bigdata.svn.sourceforge.net/bigdata/?rev=4488&view=rev Author: martyncutcher Date: 2011-05-12 12:42:55 +0000 (Thu, 12 May 2011) Log Message: ----------- Add context registration Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java 2011-05-12 09:18:13 UTC (rev 4487) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java 2011-05-12 12:42:55 UTC (rev 4488) @@ -2227,6 +2227,10 @@ source.getResourceLocator()// delegate locator ); + final IBufferStrategy bufferStrategy = source.getBufferStrategy(); + if (bufferStrategy instanceof RWStrategy) { + ((RWStrategy) bufferStrategy).getRWStore().registerContext(this); + } } /* Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java 2011-05-12 09:18:13 UTC (rev 4487) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java 2011-05-12 12:42:55 UTC (rev 4488) @@ -862,6 +862,10 @@ } public void releaseSession(RWWriteCacheService cache) { + if (m_context != null) { + throw new IllegalStateException("Calling releaseSession on shadowed allocator"); + } + if (this.m_sessionActive) { if (log.isTraceEnabled()) log.trace("Allocator: #" + m_index + " releasing session protection"); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java 2011-05-12 09:18:13 UTC (rev 4487) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java 2011-05-12 12:42:55 UTC (rev 4488) @@ -1681,6 +1681,8 @@ * unwritten allocations. */ void releaseSessions() { + assert(m_activeTxCount == 0 && m_contexts.isEmpty()); + if (m_minReleaseAge == 0) { for (FixedAllocator fa : m_allocs) { fa.releaseSession(m_writeCache); @@ -3512,7 +3514,23 @@ return totalFreed; } + /** + * When a new context is started it must be registered to ensure it is + * protected. + * + * @param context + */ + public void registerContext(IAllocationContext context) { + m_allocationLock.lock(); + try { + establishContextAllocation(context); + } finally { + m_allocationLock.unlock(); + } + } + + /** * The ContextAllocation object manages a freeList of associated allocators * and an overall list of allocators. When the context is detached, all * allocators must be released and any that has available capacity will be @@ -3532,6 +3550,10 @@ m_contextRemovals++; alloc.release(); } + + if (m_contexts.isEmpty() && this.m_activeTxCount == 0) { + releaseSessions(); + } } finally { m_allocationLock.unlock(); } @@ -4444,7 +4466,7 @@ if(log.isInfoEnabled()) log.info("#activeTx="+m_activeTxCount); - if (m_activeTxCount == 0) { + if (m_activeTxCount == 0 && m_contexts.isEmpty()) { releaseSessions(); } } finally { @@ -4505,5 +4527,6 @@ m_allocationLock.unlock(); } } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |