Index: C:/Documents and Settings/Vladimirov/workspace/ftpserver/src/java/org/apache/ftpserver/FtpStatisticsImpl.java =================================================================== --- C:/Documents and Settings/Vladimirov/workspace/ftpserver/src/java/org/apache/ftpserver/FtpStatisticsImpl.java (revision 328337) +++ C:/Documents and Settings/Vladimirov/workspace/ftpserver/src/java/org/apache/ftpserver/FtpStatisticsImpl.java (working copy) @@ -60,6 +60,7 @@ private long m_bytesUpload = 0L; private long m_bytesDownload = 0L; + private final Object lock = new Object(); /** * Set the log factory - does nothing. @@ -200,18 +201,22 @@ /** * Increment upload count. */ - public void setUpload(IConnection connection, FileObject file, long size) { - ++m_uploadCount; - m_bytesUpload += size; + public synchronized void setUpload(IConnection connection, FileObject file, long size) { + synchronized (lock) { + ++m_uploadCount; + m_bytesUpload += size; + } notifyUpload(connection, file, size); } /** * Increment download count. */ - public void setDownload(IConnection connection, FileObject file, long size) { - ++m_downloadCount; - m_bytesDownload += size; + public synchronized void setDownload(IConnection connection, FileObject file, long size) { + synchronized (lock) { + ++m_downloadCount; + m_bytesDownload += size; + } notifyDownload(connection, file, size); } @@ -219,7 +224,9 @@ * Increment delete count. */ public void setDelete(IConnection connection, FileObject file) { - ++m_deleteCount; + synchronized (lock) { + ++m_deleteCount; + } notifyDelete(connection, file); } @@ -227,7 +234,9 @@ * Increment make directory count. */ public void setMkdir(IConnection connection, FileObject file) { - ++m_mkdirCount; + synchronized (lock) { + ++m_mkdirCount; + } notifyMkdir(connection, file); } @@ -235,7 +244,9 @@ * Increment remove directory count. */ public void setRmdir(IConnection connection, FileObject file) { - ++m_rmdirCount; + synchronized (lock) { + ++m_rmdirCount; + } notifyRmdir(connection, file); } @@ -243,8 +254,10 @@ * Increment open connection count. */ public void setOpenConnection(IConnection connection) { - ++m_currConnections; - ++m_totalConnections; + synchronized (lock) { + ++m_currConnections; + ++m_totalConnections; + } notifyOpenConnection(connection); } @@ -252,7 +265,9 @@ * Decrement open connection count. */ public void setCloseConnection(IConnection connection) { - --m_currConnections; + synchronized (lock) { + --m_currConnections; + } notifyCloseConnection(connection); } @@ -260,12 +275,14 @@ * New login. */ public void setLogin(IConnection connection) { - ++m_currLogins; - ++m_totalLogins; - User user = connection.getRequest().getUser(); - if( "anonymous".equals(user.getName()) ) { - ++m_currAnonLogins; - ++m_totalAnonLogins; + synchronized (lock) { + ++m_currLogins; + ++m_totalLogins; + User user = connection.getRequest().getUser(); + if( "anonymous".equals(user.getName()) ) { + ++m_currAnonLogins; + ++m_totalAnonLogins; + } } notifyLogin(connection); } @@ -274,10 +291,12 @@ * User logout */ public void setLogout(IConnection connection) { - --m_currLogins; - User user = connection.getRequest().getUser(); - if( "anonymous".equals(user.getName()) ) { - --m_currAnonLogins; + synchronized (lock) { + --m_currLogins; + User user = connection.getRequest().getUser(); + if( "anonymous".equals(user.getName()) ) { + --m_currAnonLogins; + } } notifyLogout(connection); }