2005-10-19 jrandom

* Bugfix for the auto-update code to handle different usage patterns
    * Decreased the addressbook recheck frequency to once every 12 hours
      instead of hourly.
    * Handle dynamically changing the HMAC size (again, unless your nym is
      toad or jrandom, ignore this ;)
    * Cleaned up some synchronization/locking code
This commit is contained in:
jrandom
2005-10-19 05:15:12 +00:00
committed by zzz
parent 2d70103f88
commit df4b998a6a
9 changed files with 135 additions and 108 deletions

View File

@ -128,10 +128,13 @@ public class HMACSHA256Generator {
if (_available.size() > 0)
return (HMac)_available.remove(0);
}
// the HMAC is hardcoded to use SHA256 digest size
// for backwards compatability. next time we have a backwards
// incompatible change, we should update this by removing ", 32"
if (_useMD5)
return new HMac(new MD5Digest());
return new HMac(new MD5Digest(), 32);
else
return new HMac(new SHA256Digest());
return new HMac(new SHA256Digest(), 32);
}
private void release(HMac mac) {
synchronized (_available) {

View File

@ -115,27 +115,29 @@ public class BufferedStatLog implements StatLog {
int writeStart = -1;
int writeEnd = -1;
while (true) {
synchronized (_events) {
if (_eventNext > _lastWrite) {
if (_eventNext - _lastWrite < _flushFrequency)
try { _events.wait(30*1000); } catch (InterruptedException ie) {}
} else {
if (_events.length - 1 - _lastWrite + _eventNext < _flushFrequency)
try { _events.wait(30*1000); } catch (InterruptedException ie) {}
try {
synchronized (_events) {
if (_eventNext > _lastWrite) {
if (_eventNext - _lastWrite < _flushFrequency)
_events.wait(30*1000);
} else {
if (_events.length - 1 - _lastWrite + _eventNext < _flushFrequency)
_events.wait(30*1000);
}
writeStart = (_lastWrite + 1) % _events.length;
writeEnd = _eventNext;
_lastWrite = (writeEnd == 0 ? _events.length-1 : writeEnd - 1);
}
writeStart = (_lastWrite + 1) % _events.length;
writeEnd = _eventNext;
_lastWrite = (writeEnd == 0 ? _events.length-1 : writeEnd - 1);
}
if (writeStart != writeEnd) {
try {
if (_log.shouldLog(Log.DEBUG))
_log.debug("writing " + writeStart +"->"+ writeEnd);
writeEvents(writeStart, writeEnd);
} catch (Exception e) {
_log.error("error writing " + writeStart +"->"+ writeEnd, e);
if (writeStart != writeEnd) {
try {
if (_log.shouldLog(Log.DEBUG))
_log.debug("writing " + writeStart +"->"+ writeEnd);
writeEvents(writeStart, writeEnd);
} catch (Exception e) {
_log.error("error writing " + writeStart +"->"+ writeEnd, e);
}
}
}
} catch (InterruptedException ie) {}
}
}

View File

@ -58,9 +58,14 @@ implements Mac
public HMac(
Digest digest)
{
this(digest, digest.getDigestSize());
}
public HMac(
Digest digest, int sz)
{
this.digest = digest;
digestSize = digest.getDigestSize();
this.digestSize = sz;
}
public String getAlgorithmName()
@ -141,7 +146,7 @@ implements Mac
byte[] out,
int outOff)
{
byte[] tmp = acquireTmp();
byte[] tmp = acquireTmp(digestSize);
//byte[] tmp = new byte[digestSize];
digest.doFinal(tmp, 0);
@ -156,23 +161,27 @@ implements Mac
return len;
}
private static ArrayList _tmpBuf = new ArrayList();
private static byte[] acquireTmp() {
/**
* list of buffers - index 0 is the cache for 32 byte arrays, while index 1 is the cache for 16 byte arrays
*/
private static ArrayList _tmpBuf[] = new ArrayList[] { new ArrayList(), new ArrayList() };
private static byte[] acquireTmp(int sz) {
byte rv[] = null;
synchronized (_tmpBuf) {
if (_tmpBuf.size() > 0)
rv = (byte[])_tmpBuf.remove(0);
synchronized (_tmpBuf[sz == 32 ? 0 : 1]) {
if (_tmpBuf[sz == 32 ? 0 : 1].size() > 0)
rv = (byte[])_tmpBuf[sz == 32 ? 0 : 1].remove(0);
}
if (rv != null)
Arrays.fill(rv, (byte)0x0);
else
rv = new byte[32]; // hard coded against SHA256 (should be digestSize)
rv = new byte[sz];
return rv;
}
private static void releaseTmp(byte buf[]) {
synchronized (_tmpBuf) {
if (_tmpBuf.size() < 100)
_tmpBuf.add((Object)buf);
if (buf == null) return;
synchronized (_tmpBuf[buf.length == 32 ? 0 : 1]) {
if (_tmpBuf[buf.length == 32 ? 0 : 1].size() < 100)
_tmpBuf[buf.length == 32 ? 0 : 1].add((Object)buf);
}
}