1 18 19 package com.knowgate.jcifs.smb; 20 21 import com.knowgate.jcifs.Config; 22 23 class BufferCache { 24 25 private static final int MAX_BUFFERS = Config.getInt( "jcifs.smb.maxBuffers", 16 ); 26 27 private static Object [] cache = new Object [MAX_BUFFERS]; 28 private static int numBuffers = 0; 29 private static int freeBuffers = 0; 30 31 static byte[] getBuffer() { 32 byte[] buf; 33 34 synchronized( cache ) { 35 while( freeBuffers == 0 && numBuffers == MAX_BUFFERS ) { 36 try { 37 cache.wait(); 38 } catch( InterruptedException ie ) { 39 return null; 40 } 41 } 42 43 if( freeBuffers > 0 ) { 44 for( int i = 0; i < MAX_BUFFERS; i++ ) { 45 if( cache[i] != null ) { 46 buf = (byte[])cache[i]; 47 cache[i] = null; 48 freeBuffers--; 49 return buf; 50 } 51 } 52 } 53 54 buf = new byte[SmbComTransaction.TRANSACTION_BUF_SIZE]; 55 numBuffers++; 56 } 57 58 return buf; 59 } 60 static void releaseBuffer( byte[] buf ) { 61 synchronized( cache ) { 62 for( int i = 0; i < MAX_BUFFERS; i++ ) { 63 if( cache[i] == null ) { 64 cache[i] = buf; 65 freeBuffers++; 66 cache.notify(); 67 return; 68 } 69 } 70 } 71 } 72 } 73 | Popular Tags |